#include <bits/stdc++.h>
using namespace std;
int dp[45][80][80];
int main() {
  int a, b, n, m, u, i, j, k, p, s;
  cin >> a >> b;
  n = min(a, b);
  m = max(a, b);
  u = 1 << n;
  memset(dp, 0, sizeof(dp));
  for (i = 1; i < u; i++) {
    for (j = 0; j < u; j++) dp[0][i][j] = 100;
  }
  int minVal, x, c;
  bool y;
  for (k = 1; k <= m; k++) {
    for (i = 0; i < u; i++) {
      for (j = 0; j < u; j++) {
        minVal = 100;
        for (p = 0; p < u; p++) {
          y = true;
          c = 0;
          for (s = 0; s < n; s++) {
            x = ((i >> s) & 1);
            c += x;
            x |= (s > 0) ? ((i >> (s - 1)) & 1) : 0;
            x |= ((p >> s) & 1);
            x |= (s < n - 1) ? ((i >> (s + 1)) & 1) : 0;
            x |= ((j >> s) & 1);
            if (x) continue;
            y = false;
            break;
          }
          if (y && dp[k - 1][p][i] < 100)
            minVal = min(minVal, dp[k - 1][p][i] + c);
        }
        dp[k][i][j] = minVal;
      }
    }
  }
  minVal = 100;
  for (i = 0; i < u; i++) minVal = min(minVal, dp[m][i][0]);
  cout << n * m - minVal << endl;
  return 0;
}
