#include <bits/stdc++.h>
using namespace std;
int n, m;
bool vis[45][300][300];
int dp[45][300][300];
int solve(int i, int x, int mi) {
  if (i == n + 1) {
    if (mi == 0) return 0;
    return 1000;
  }
  if (vis[i][x][mi]) return dp[i][x][mi];
  vis[i][x][mi] = 1;
  int y, c, ret = 1000, inv;
  for (int j = 0; j < (1 << m); j++) {
    y = x;
    c = 0;
    for (int k = 0; k < m; k++) {
      if (j & (1 << k)) {
        c++;
        y |= (1 << k);
        if (k > 0) y |= (1 << (k - 1));
        if (k < m - 1) y |= (1 << (k + 1));
      }
    }
    if ((j & mi) == mi) {
      inv = 0;
      for (int k = 0; k < m; k++) {
        if (y & (1 << k)) continue;
        inv |= (1 << k);
      }
      ret = min(ret, solve(i + 1, j, inv) + c);
    }
  }
  return dp[i][x][mi] = ret;
}
int main() {
  cin >> n >> m;
  if (n < m) swap(n, m);
  int ans = n * m - solve(1, 0, 0);
  cout << ans << endl;
}
