#include <bits/stdc++.h>
using namespace std;
int n, m;
int f[45][70][70];
int cc(int x) {
  int s;
  for (s = 0; x; x &= (x - 1)) s++;
  return s;
}
int check(int x, int y, int z) {
  int i;
  for (i = 0; i < n; i++)
    if ((y & (1 << i)) == 0) {
      if ((x & (1 << i)) > 0) continue;
      if ((z & (1 << i)) > 0) continue;
      if (i > 0 && (y & (1 << (i - 1))) > 0) continue;
      if (i < n - 1 && (y & (1 << (i + 1))) > 0) continue;
      return 0;
    }
  return 1;
}
int main() {
  int i, j, k, p, q, s, ans;
  scanf("%d%d", &n, &m);
  if (n > m) swap(n, m);
  memset(f, -1, sizeof(f));
  f[0][0][0] = 0;
  s = 1 << n;
  for (i = 0; i < m; i++)
    for (j = 0; j < s; j++)
      for (k = 0; k < s; k++)
        if (f[i][j][k] >= 0)
          for (p = 0; p < s; p++)
            for (q = 0; q < s; q++)
              if ((p & q) == 0 && (k & p) == k && check(j, p, q))
                f[i + 1][p][q] = max(f[i + 1][p][q], f[i][j][k] + n - cc(p));
  ans = 0;
  for (i = 0; i < s; i++) ans = max(ans, f[m][i][0]);
  printf("%d\n", ans);
  return 0;
}
