#include <bits/stdc++.h>
int i, j, k, n, m, g[105][105], flag, b;
int main() {
  while (scanf("%d%d", &n, &m) != EOF) {
    memset(g, 0, sizeof(g));
    if (n == 1) {
      if (m & 1) {
        g[1][m / 2 + 1] = m;
        b = 1;
        for (i = m / 2 + 2; i <= m; ++i) {
          g[1][i] = b;
          b += 2;
        }
        b = 2;
        for (i = m / 2; i >= 1; --i) {
          g[1][i] = b;
          b += 2;
        }
      } else {
        b = 1;
        for (i = m / 2 + 1; i <= m; ++i) {
          g[1][i] = b;
          b += 2;
        }
        b = m;
        for (i = m / 2; i >= 1; --i) {
          g[1][i] = b;
          b -= 2;
        }
      }
    } else if (m == 1) {
      if (n & 1) {
        g[n / 2 + 1][1] = n;
        b = 1;
        for (i = n / 2 + 2; i <= n; ++i) {
          g[i][1] = b;
          b += 2;
        }
        b = 2;
        for (i = n / 2; i >= 1; --i) {
          g[i][1] = b;
          b += 2;
        }
      } else {
        b = 1;
        for (i = n / 2 + 1; i <= n; ++i) {
          g[i][1] = b;
          b += 2;
        }
        b = n;
        for (i = n / 2; i >= 1; --i) {
          g[i][1] = b;
          b -= 2;
        }
      }
    } else {
      i = j = 1;
      for (k = 1; k <= m * n; ++k) {
        g[i][j] = k;
        i++;
        j++;
        if (i > n) i = 1;
        if (j > m) j = 1;
        if (g[i][j]) j += 1;
        if (j > m) j = 1;
      }
    }
    flag = 0;
    for (i = 1; i <= n; ++i) {
      for (j = 1; j <= m; ++j) {
        if (j < m && fabs(g[i][j] - g[i][j + 1]) <= 1) {
          flag = 1;
          break;
        }
        if (i < n && fabs(g[i][j] - g[i + 1][j]) <= 1) {
          flag = 1;
          break;
        }
      }
      if (flag) break;
    }
    if (flag)
      printf("-1\n");
    else {
      for (i = 1; i <= n; ++i) {
        for (j = 1; j <= m; ++j) {
          printf("%d", g[i][j]);
          if (j != m) printf(" ");
        }
        printf("\n");
      }
    }
  }
  return 0;
}
