#include <bits/stdc++.h>
using namespace std;
int n, m, a[100010];
int d[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
set<int> adj[100010];
int bad(int x, int y) {
  int p = a[(x - 1) * m + y];
  for (int i = 0; i < 4; i++) {
    int nx = x + d[i][0], ny = y + d[i][1];
    if (1 <= nx && nx <= n && 1 <= ny && ny <= m)
      if (adj[p].find(a[(nx - 1) * m + ny]) != adj[p].end()) return 1;
  }
  return 0;
}
int ok() {
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (bad(i, j)) return 0;
  return 1;
}
void calc() {
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      for (int k = 0; k < 4; k++) {
        int x = i + d[k][0], y = j + d[k][1];
        if (1 <= x && x <= n && 1 <= y && y <= m)
          adj[(i - 1) * m + j].insert(a[(x - 1) * m + y]);
      }
}
int main() {
  cin >> n >> m;
  int j = 1, cnt = 0;
  for (int i = 1; i <= n * m; i++) a[j++] = i;
  calc();
  j = 1;
  for (int i = 1; i <= n * m; i += 2) a[j++] = i;
  for (int i = 2; i <= n * m; i += 2) a[j++] = i;
  while (!ok() && cnt++ < 1000) random_shuffle(a + 1, a + n * m + 1);
  if (!ok())
    cout << "NO" << endl;
  else {
    cout << "YES" << endl;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) cout << a[(i - 1) * m + j] << " ";
      cout << endl;
    }
  }
  return 0;
}
