#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const double eps = 1e-10;
const int INF = 0x3f3f3f3f;
const long long INFLL = 0x3f3f3f3f3f3f3f3f;
const int MAXN = 1e6 + 5;
int a[MAXN];
int n, m;
int check(int i) {
  if (i % m != 0)
    if (abs(a[i] - a[i - 1]) == 1 || abs(a[i] - a[i - 1]) == m) return true;
  if (i >= m)
    if (abs(a[i] - a[i - m]) == 1 || abs(a[i] - a[i - m]) == m) return true;
  return 0;
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n * m; i++) a[i] = i + 1;
  int ok = 0;
  while (clock() < 1.9 * CLOCKS_PER_SEC) {
    random_shuffle(a, a + n * m);
    int f = 0;
    for (int i = 0; i < n * m; i++) {
      int cnt = 0;
      while (check(i) && cnt <= 100) {
        if (i < n * m - 1)
          swap(a[i], a[rand() % (n * m - i - 1) + i + 1]);
        else
          cnt = INF;
        cnt++;
      }
      if (cnt > 100) {
        f = 1;
        break;
      }
    }
    if (f) continue;
    ok = 1;
    puts("YES");
    for (int i = 1; i <= n; i++) {
      for (int j = 0; j < m; j++) printf("%d ", a[(i - 1) * m + j]);
      puts("");
    }
    break;
  }
  if (!ok) puts("NO");
  return 0;
}
