#include <bits/stdc++.h>
using namespace std;
const long long sz = 1009;
long long dr[] = {2, 2, -2, -2, 1, -1, 1, -1};
long long dc[] = {1, -1, 1, -1, 2, 2, -2, -2};
long long row, col, c0, c1;
bool vis[sz][sz];
inline bool isValid(long long r, long long c) {
  if (r < 1 || c < 1 || r > row || c > col) return 0;
  return 1;
}
void dfs(long long r, long long c, long long col) {
  vis[r][c] = 1;
  if (col == 0)
    c0++;
  else
    c1++;
  for (long long k = 0; k < 8; ++k) {
    long long nr = r + dr[k], nc = c + dc[k];
    if (!isValid(nr, nc) || vis[nr][nc]) continue;
    dfs(nr, nc, col ^ 1);
  }
}
int main() {
  cin >> row >> col;
  long long ans = 0;
  for (long long r = 1; r <= row; ++r) {
    for (long long c = 1; c <= col; ++c) {
      if (vis[r][c]) continue;
      c0 = c1 = 0;
      dfs(r, c, 0);
      ans += max(c0, c1);
    }
  }
  cout << ans << '\n';
  return 0;
}
