#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
using ii = pair<int, int>;
static void brute_force(int w, int h) {
  static int p[16];
  int x, y;
  for (((x)) = (0); ((x)) < ((w)); ((x))++)
    for (((y)) = (0); ((y)) < ((h)); ((y))++) p[x + y * w] = x + y * w;
  do {
    for (((x)) = (0); ((x)) < ((w)); ((x))++)
      for (((y)) = (0); ((y)) < ((h - 1)); ((y))++) {
        int i = x + y * w;
        int j = x + (y + 1) * w;
        if (abs(p[i] % w - p[j] % w) + abs(p[i] / w - p[j] / w) == 1) goto fail;
      }
    for (((x)) = (0); ((x)) < ((w - 1)); ((x))++)
      for (((y)) = (0); ((y)) < ((h)); ((y))++) {
        int i = x + y * w;
        int j = x + 1 + y * w;
        if (abs(p[i] % w - p[j] % w) + abs(p[i] / w - p[j] / w) == 1) goto fail;
      }
    static int ans[16];
    for (((x)) = (0); ((x)) < ((h * w)); ((x))++) ans[p[x]] = x + 1;
    for (((y)) = (0); ((y)) < ((h)); ((y))++) {
      for (((x)) = (0); ((x)) < ((w)); ((x))++) printf("%i ", ans[x + y * w]);
      printf("\n");
    }
    return;
  fail:;
  } while (next_permutation(p, p + h * w));
  puts("NO");
}
static void shifts(int w, int h) {
  auto label = [w, h](int x, int y) -> int {
    if (w > h) {
      if (y % 2) x = (x + 2) % w;
      if (x % 2) y = (y + 1) % h;
    } else {
      if (y % 2) x = (x + 1) % w;
      if (x % 2) y = (y + 2) % h;
    }
    return x + y * w + 1;
  };
  puts("YES");
  int x, y;
  for (((y)) = (0); ((y)) < ((h)); ((y))++)
    for (((x)) = (0); ((x)) < ((w)); ((x))++)
      printf("%i%c", label(x, y), " \n"[x + 1 == w]);
}
static void interleave(int w, int h) {
  int n = w * h;
  vi x;
  int l = 0;
  int r = (n + 1) / 2;
  int i = 0;
  for (((i)) = (0); ((i)) < ((n)); ((i))++)
    if (i % 2) x.push_back(i);
  for (((i)) = (0); ((i)) < ((n)); ((i))++)
    if (i % 2 == 0) x.push_back(i);
  puts("YES");
  if (w == 1) {
    for (((i)) = (0); ((i)) < ((n)); ((i))++) printf("%i\n", 1 + x[i]);
  } else {
    for (((i)) = (0); ((i)) < ((n - 1)); ((i))++) printf("%i ", 1 + x[i]);
    printf("%i\n", 1 + x[i]);
  }
}
int main() {
  int h, w;
  cin >> h >> w;
  if (h == 1 && w == 1)
    puts("YES\n1");
  else if (h == 3 && w == 3) {
    puts("YES\n1 8 2\n3 4 6\n5 9 7");
  } else if (h < 4 && w < 4)
    puts("NO");
  else {
    if (h == 1 || w == 1)
      interleave(w, h);
    else
      shifts(w, h);
  }
  return 0;
}
