#include <bits/stdc++.h>
using namespace std;
int dx[] = {-2, -2, -1, 1, 2, 2, 1, -1};
int dy[] = {-1, 1, 2, 2, 1, -1, -2, -2};
int main() {
  ios_base::sync_with_stdio(0);
  int n, m;
  cin >> n >> m;
  int N = n * m;
  vector<vector<int> > G(N);
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      for (int k = 0; k < 8; ++k) {
        int nowy_x = i + dx[k], nowy_y = j + dy[k];
        if (nowy_x >= 0 && nowy_x < n && nowy_y >= 0 && nowy_y < m) {
          G[i * m + j].push_back(nowy_x * m + nowy_y);
        }
      }
    }
  }
  vector<int> col(N, -1);
  int odp = 0;
  for (int i = 0; i < N; ++i) {
    if (col[i] == -1) {
      int zero = 0, jeden = 0;
      stack<int> S;
      int akt;
      S.push(i);
      col[i] = 0;
      ++zero;
      while (!S.empty()) {
        akt = S.top();
        S.pop();
        for (int j = 0; j < G[akt].size(); ++j) {
          if (col[G[akt][j]] == -1) {
            if (col[akt] == 0) {
              col[G[akt][j]] = 1;
              ++jeden;
            } else {
              col[G[akt][j]] = 0;
              ++zero;
            }
            S.push(G[akt][j]);
          }
        }
      }
      odp += max(zero, jeden);
    }
  }
  cout << odp;
  return 0;
}
