#include <bits/stdc++.h>
using namespace std;
int sh, lo;
int memo[300][300][100];
int numOfOne(int i) {
  int re = 0;
  while (i > 0) {
    if (i % 2 == 1) {
      re++;
    }
    i /= 2;
  }
  return re;
}
int dp(int curr, int prev, int rowNum) {
  int bestAns = 10000;
  if (rowNum == lo + 1) {
    if (prev == (1 << sh) - 1) {
      return 0;
    }
    return 10000;
  } else {
    if (memo[curr][prev][rowNum] != -1) {
      return memo[curr][prev][rowNum];
    }
    for (int i = 0; i < (1 << sh); i++) {
      if ((prev | i) != ((1 << sh) - 1)) {
        continue;
      }
      int num1 = numOfOne(i);
      int nextPrev = curr;
      nextPrev |= i;
      nextPrev |= (i << 1);
      nextPrev |= (i >> 1);
      nextPrev &= (1 << sh) - 1;
      if (num1 + dp(i, nextPrev, rowNum + 1) < bestAns) {
        bestAns = num1 + dp(i, nextPrev, rowNum + 1);
      }
    }
  }
  memo[curr][prev][rowNum] = bestAns;
  return bestAns;
}
int main() {
  int a, b;
  cin >> a >> b;
  if (a > b) {
    sh = b;
    lo = a;
  } else {
    sh = a;
    lo = b;
  }
  for (int i = 0; i < 300; i++) {
    for (int j = 0; j < 300; j++) {
      for (int k = 0; k < 100; k++) {
        memo[i][j][k] = -1;
      }
    }
  }
  cout << a * b - dp(0, (1 << sh) - 1, 1) << endl;
}
