#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  srand(time(NULL));
  int n, m;
  cin >> n >> m;
  vector<vector<int> > pat(n, vector<int>(m, 0)), now, to;
  int cnt = 0;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      pat[i][j] = cnt++;
    }
  }
  int sz = n * m;
  vector<int> lol(sz);
  for (int i = 0; i < sz; ++i) lol[i] = i;
  int kek = 0;
  for (; true;) {
    now = pat;
    random_shuffle(lol.begin(), lol.end());
    bool flag = true;
    int p = 0;
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j) {
        ++kek;
        now[i][j] = lol[p++];
        int x = now[i][j] / m;
        int y = now[i][j] % m;
        if ((x > 0 && ((i > 0 && pat[x - 1][y] == now[i - 1][j]) ||
                       (j > 0 && pat[x - 1][y] == now[i][j - 1]))) ||
            (y > 0 && ((i > 0 && pat[x][y - 1] == now[i - 1][j]) ||
                       (j > 0 && pat[x][y - 1] == now[i][j - 1]))) ||
            (x < n - 1 && ((i > 0 && pat[x + 1][y] == now[i - 1][j]) ||
                           (j > 0 && pat[x + 1][y] == now[i][j - 1]))) ||
            (y < m - 1 && ((i > 0 && pat[x][y + 1] == now[i - 1][j]) ||
                           (j > 0 && pat[x][y + 1] == now[i][j - 1])))) {
          flag = false;
          break;
        }
      }
      if (!flag) break;
    }
    if (flag) {
      cout << "YES" << endl;
      for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
          cout << now[i][j] + 1 << " ";
        }
        cout << endl;
      }
      return 0;
    }
    if (kek > int(2e7)) break;
  }
  cout << "NO" << endl;
  return 0;
}
