#include <bits/stdc++.h>
using namespace std;
int ans[1000010], n, m;
bool flag = 0;
bool check(int a, int b) {
  int x1 = (a - 1) / m + 1, y1 = a % m == 0 ? m : a % m;
  int x2 = (b - 1) / m + 1, y2 = b % m == 0 ? m : b % m;
  return !((x1 == x2 && abs(y1 - y2) == 1) || (y1 == y2 && abs(x1 - x2) == 1));
}
void dfs(int p) {
  if (p == n * m + 1) {
    flag = 1;
    return;
  }
  for (int i = p; i <= n * m; i++) {
    int x = (p - 1) / m + 1, y = p % m == 0 ? m : p % m;
    swap(ans[i], ans[p]);
    if (x - 1 && !check(ans[p], ans[p - m])) continue;
    if (y - 1 && !check(ans[p], ans[p - 1])) continue;
    dfs(p + 1);
    if (flag) return;
    swap(ans[i], ans[p]);
  }
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      ans[(i - 1) * m + j] = (i - 1) * m + j;
    }
  }
  dfs(1);
  if (flag) {
    printf("YES\n");
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j < m; j++) {
        printf("%d ", ans[(i - 1) * m + j]);
      }
      printf("%d\n", ans[(i - 1) * m + m]);
    }
  } else
    printf("NO");
  return 0;
}
