#include <bits/stdc++.h>
using namespace std;
int g[1 << 6], f[41][1 << 6][1 << 6];
int main() {
  int n, m, i, j, k, p, x;
  scanf("%d%d", &n, &m);
  if (n < m) swap(n, m);
  int all = (1 << m) - 1;
  for (i = 0; i <= all; ++i) {
    g[i] = 0;
    for (j = 0; j < m; ++j)
      if ((i & (1 << j)) == 0) ++g[i];
  }
  memset(f, 255, sizeof(f));
  f[0][0][0] = 0;
  for (i = 0; i < n; ++i)
    for (j = 0; j <= all; ++j)
      for (k = 0; k <= all; ++k)
        if (f[i][j][k] >= 0)
          for (p = k; p <= all; p = (p + 1) | k) {
            x = ((p | (p << 1) | (p >> 1) | j) & all) ^ all;
            f[i + 1][p][x] = max(f[i + 1][p][x], f[i][j][k] + g[p]);
          }
  int ans = 0;
  for (i = 0; i <= all; ++i) ans = max(ans, f[n][i][0]);
  printf("%d\n", ans);
  return 0;
}
