#include <bits/stdc++.h>
using namespace std;
int n, m, a[10010];
bool adj(int i, int j, int r, int c) {
  return i == r && abs(j - c) == 1 || j == c && abs(i - r) == 1;
}
void print() {
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m - 1; ++j) printf("%d ", a[i * m + j] + 1);
    printf("%d\n", a[i * m + m - 1] + 1);
  }
}
int main() {
  scanf("%d%d", &n, &m);
  int tot = n * m;
  if (n * m <= 6) {
    for (int i = 0; i < tot; ++i) a[i] = i;
    do {
      bool fail = 0;
      for (int i = 0; !fail && i < tot; ++i)
        for (int j = i + 1; !fail && j < tot; ++j)
          if (abs(a[i] - a[j]) == 1 && adj(i / m, i % m, j / m, j % m))
            fail = 1;
      if (!fail) {
        print();
        return 0;
      }
    } while (next_permutation(a, a + tot));
    puts("-1");
    return 0;
  }
  memset(a, -1, sizeof(a));
  if (n == 1 || m == 1) {
    int idx = 0;
    while (idx < tot) {
      for (int i = 0; i < tot; ++i)
        if (a[i] == -1) {
          int cur = i;
          while (a[cur] == -1) {
            a[cur] = idx++;
            cur = (cur + 2) % tot;
          }
        }
    }
    print();
    return 0;
  }
  int idx = 0;
  while (idx < tot) {
    for (int i = 0; i < tot; ++i)
      if (a[i] == -1) {
        int x = i / m, y = i % m;
        while (a[x * m + y] == -1) {
          a[x * m + y] = idx++;
          x = (x + 1) % n;
          y = (y + 1) % m;
        }
      }
  }
  print();
  return 0;
}
