#include <bits/stdc++.h>
using namespace std;
int a, b;
int V[50][1 << 7][1 << 7];
int B(int x) {
  if (x) return B(x / 2) + (x & 1);
  return 0;
}
int M(int n, int r, int rr) {
  if (n == 0 && rr == 0) return 0;
  if (n == 0) return 111111;
  if (V[n][r][rr]) return V[n][r][rr];
  V[n][r][rr] = 1111111;
  for (int i = 0; i < (1 << b); i++)
    if ((rr & i) == rr) {
      int is = 0;
      for (int j = 0; j < b; j++)
        if ((i & (1 << j)) == 0) {
          if (r & (1 << j)) continue;
          if (j > 0 && (i & (1 << (j - 1)))) continue;
          if (i & (1 << (j + 1))) continue;
          is += 1 << j;
        }
      V[n][r][rr] = min(V[n][r][rr], M(n - 1, i, is) + B(i));
    }
  return V[n][r][rr];
}
int main() {
  scanf("%d%d", &a, &b);
  if (a < b) swap(a, b);
  printf("%d\n", a * b - M(a, 0, 0));
  return 0;
}
