#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <cmath>
#include <numeric>
#include <string>
#include <set>
#include <iomanip>
#include <stack>
#include <cctype>

using namespace std;
#define ll long long
#define ld long double
#define print(a) for (auto i: a){cout << i << " ";}cout << endl;
#define dprint(a) for (ll i = 0; i < a.size(); i++){ cout << i << ": ";for(auto j: a[i]){cout << j << "\t";}cout << endl;}cout << endl;
#define open(name_input, name_output) freopen(name_input, "r", stdin); freopen(name_output, "w", stdout);
#define input(a, n) for(ll i = 1; i <= n; i++){cin>>a[i];}
#define tests ll number_of_tests; cin>>number_of_tests; while(number_of_tests--)
#define slprint(sl) for(auto i: sl){ cout << i.first << " " << i.second << endl;}

ll cnt = 0;
vector<vector<ll>> dp;

void func(ll a, ll b){
    cnt += a * b;
    if (a * b == 1){
        return;
    }
    if (a == 0 or b == 0){
        while (true){
            continue;
        }
    }
    if (a % 2 == 0){
        func(a / 2, b);
        func(a / 2, b);
    }
    else if (b % 2 == 0){
        func(a, b / 2);
        func(a, b / 2);
    }
    else if (a == 1){
        func(a, b / 2);
        func(a, b / 2 + 1);
    }
    else{
        func(a / 2, b);
        func(a / 2 + 1, b);
    }
}


int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ll h, w;
    cin >> h >> w;
    dp.resize(h);
    for (int i = 0; i < h; ++i) {
        dp[i].assign(w, 0);
    }
    func(h, w);
    cout << cnt;
}




