#include <bits/stdc++.h>
using namespace std;
int dx[] = {1, 1, -1, -1, 2, 2, -2, -2};
int dy[] = {2, -2, 2, -2, 1, -1, 1, -1};
int mat[1003][1003];
int a1, a2;
int n, m;
bool p(int x, int y) {
  if (x >= 0 && x < n && y >= 0 && y < m)
    return true;
  else
    return false;
}
void dfs(int x, int y, int c) {
  mat[x][y] = c;
  if (c == 0)
    a1++;
  else
    a2++;
  for (int i = 0; i < 8; i++) {
    int nx = x + dx[i], ny = y + dy[i];
    if (p(nx, ny) && mat[nx][ny] == -1) {
      dfs(nx, ny, 1 - c);
    }
  }
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) mat[i][j] = -1;
  }
  int ans = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (mat[i][j] == -1) {
        a1 = 0;
        a2 = 0;
        dfs(i, j, 0);
        ans += max(a1, a2);
      }
    }
  }
  printf("%d", ans);
  return 0;
}
