//#pragma GCC optimaze("O3")
//#pragma GCC optimaze("Ofast")
//#pragma GCC optimaze("unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")

#include <bits/stdc++.h>

#define int int64_t
#define ll long long

const int MOD = 1e9 + 7;

using namespace std;
int ans=0;
unordered_map<int,unordered_map<int,int>> dp;
int ld(int h,int w){
    if(h<w){
        swap(h,w);
    }
    if(dp[h][w]){
        return dp[h][w];
    }
    /*if(h!=1){
        dp[h][w]=ld(h/2,w)+ld(h/2+h%2,w);
    }
    if(w!=1){
        dp[h][w]=max(dp[h][w],ld(h,w/2)+ld(h,w/2+w%2));
    }*/
    if(h!=1){
        dp[h][w]=ld(h-1,w)+ld(1,w);
    }else{
        dp[h][w]=max(dp[h][w],ld(h,w-1)+ld(h,1));
    }
    dp[h][w]+=h*w;
    return dp[h][w];
}
void solve(){
    dp[1][1]=1;
    int h,w;
    cin>>h>>w;
    if(h<w){
        swap(h,w);
    }
    cout<<ld(h,w);
}

signed main() {
    int t=1;
    //cin >> t;
    for(int i = 0; i < t; ++i){
        solve();
    }
    return 0;
}
