#include <bits/stdc++.h>
using namespace std;
int f[41][1 << 14];
int mask;
int cnt[1 << 7];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  if (n < m) swap(n, m);
  memset(f, 255, sizeof(f));
  f[0][0] = 0;
  mask = (1 << m) - 1;
  memset(cnt, 0, sizeof(cnt));
  for (int i = 0; i < 1 << m; ++i)
    for (int j = 0; j < m; ++j)
      if (((i >> j) & 1) == 0) cnt[i]++;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < 1 << 2 * m; ++j)
      if (f[i][j] != -1) {
        for (int p = mask - (j & mask); p >= 0;
             p = (p - 1) & (mask - (j & mask))) {
          int state = (j & mask) | p;
          int need =
              (state | (state << 1) | (state >> 1) | ((j >> m) & mask)) & mask;
          need = mask - need;
          f[i + 1][(state << m) + need] =
              max(f[i + 1][(state << m) + need], f[i][j] + cnt[state]);
          if (p == 0) break;
        }
      }
  int ans = 0;
  for (int i = 0; i < 1 << m; ++i) ans = max(ans, f[n][i << m]);
  printf("%d\n", ans);
  return 0;
}
