#include <bits/stdc++.h>
using namespace std;
int f[1000][10], M[1000], mn = 1000000, T, l, n, m, X[100][1000], LOL[1000];
bool B[1000][1000];
int rec(int a, int b) {
  int kk = 0;
  for (int i = 1; i <= n; i++) {
    M[i] = 0;
    if (f[a][i] == 2) M[i] = 1;
    if (f[a][i] == 1) kk++;
  }
  LOL[a] = kk;
  for (int i = 1; i <= n; i++) {
    if (f[b][i] != 1 && M[i] == 1) return 0;
    if (f[b][i] == 0 && f[b][i - 1] != 1 && f[b][i + 1] != 1 && f[a][i] != 1)
      return 0;
  }
  return 1;
}
int main() {
  scanf("%d%d", &n, &m);
  if (n > m) swap(n, m);
  T = pow(3, n);
  for (int i = 1; i < T; i++) {
    l = n;
    while (f[i][l] == 2) {
      f[i][l] = 0;
      l--;
    }
    f[i][l]++;
    for (int q = 0; q <= n; q++) f[i + 1][q] = f[i][q];
  }
  for (int q = 0; q < T; q++) {
    for (int w = 0; w < T; w++) {
      B[q][w] = rec(q, w);
    }
  }
  for (int i = 0; i <= m; i++) {
    for (int q = 0; q < T; q++) X[i][q] = 100000;
  }
  X[0][0] = 0;
  for (int i = 1; i <= m; i++) {
    for (int q = 0; q < T; q++) {
      for (int w = 0; w < T; w++) {
        if (B[w][q] == 1) {
          X[i][q] = ((X[i - 1][w] + LOL[q]) < (X[i][q]) ? (X[i - 1][w] + LOL[q])
                                                        : (X[i][q]));
        }
      }
    }
  }
  for (int i = 0; i < T; i++) {
    bool BOOL = 0;
    for (int q = 1; q <= n; q++) {
      if (f[i][q] == 2) BOOL = 1;
    }
    if (BOOL == 1) continue;
    mn = ((mn) < (X[m][i]) ? (mn) : (X[m][i]));
  }
  cout << n * m - mn << endl;
  ;
  return 0;
  ;
}
