#include <bits/stdc++.h>
using namespace std;
const int maxn = 40 + 5;
int n, m;
bool vis[maxn][maxn], previs[maxn][maxn];
int dx[] = {0, 1, -1, 0};
int dy[] = {1, 0, 0, -1};
bool Valid(int x, int y) { return x >= 1 && x <= n && y >= 1 && y <= m; }
int ans = 40;
void out() {
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      printf("%d ", vis[i][j]);
    }
    puts("");
  }
  puts("");
}
vector<pair<int, int> > hav;
void chosout() {
  printf("have chosen:\n");
  for (int i = 0; i < (int)hav.size(); i++) {
    printf("(%d,%d)\n", hav[i].first, hav[i].second);
  }
  puts("");
}
void dfs(int dep) {
  int sx = 0, sy = 0;
  bool fin = false;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      if (!vis[i][j]) {
        fin = true;
        sx = i, sy = j;
        break;
      }
    }
    if (fin) break;
  }
  if (!fin) {
    ans = min(ans, dep);
    return;
  }
  if (dep + 1 >= ans) return;
  int xx, yy;
  vector<pair<int, int> > infl;
  fin = false;
  for (int i = 0; i < 4; i++) {
    xx = sx + dx[i], yy = sy + dy[i];
    if (Valid(xx, yy)) {
      hav.push_back(make_pair(xx, yy));
      fin = true;
      memcpy(previs, vis, sizeof(vis));
      infl.clear();
      if (!vis[xx][yy]) {
        infl.push_back(make_pair(xx, yy));
        vis[xx][yy] = true;
      }
      for (int j = 0; j < 4; j++) {
        int nx = xx + dx[j], ny = yy + dy[j];
        if (Valid(nx, ny) && !vis[nx][ny]) {
          vis[nx][ny] = true;
          infl.push_back(make_pair(nx, ny));
        }
      }
      dfs(dep + 1);
      for (int j = 0; j < (int)infl.size(); j++) {
        vis[infl[j].first][infl[j].second] = false;
      }
      hav.pop_back();
    }
  }
  vis[sx][sy] = true;
  hav.push_back(make_pair(sx, sy));
  infl.clear();
  infl.push_back(make_pair(sx, sy));
  for (int i = 0; i < 4; i++) {
    int nx = sx + dx[i], ny = sy + dy[i];
    if (Valid(nx, ny) && !vis[nx][ny]) {
      infl.push_back(make_pair(nx, ny));
      vis[nx][ny] = true;
    }
  }
  dfs(dep + 1);
  hav.pop_back();
  for (int j = 0; j < (int)infl.size(); j++) {
    vis[infl[j].first][infl[j].second] = false;
  }
}
int rlt[45][45];
int main() {
  scanf("%d%d", &n, &m);
  dfs(0);
  printf("%d\n", n * m - ans);
  return 0;
}
