#include <bits/stdc++.h>
using namespace std;
int N, M, val[100009];
vector<int> mp[100009];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> N >> M;
  if (N == 1 && M == 1) {
    cout << "YES\n1\n";
    return 0;
  }
  if ((N <= 2 && M <= 3) || (N <= 3 && M <= 2)) {
    cout << "NO\n";
    return 0;
  }
  if (N == 3 && M == 3) {
    cout << "YES\n";
    cout << "1 9 5\n8 2 7\n3 4 6\n";
    return 0;
  }
  bool swapped = false;
  if (M < N) {
    for (int i = 0; i < M * N; ++i) val[i] = M * (i % N) + i / N + 1;
    swap(M, N), swapped = true;
  } else {
    for (int i = 0; i < M * N; ++i) val[i] = i + 1;
  }
  int n = N - 1;
  int u = 0;
  for (int i = 0; i < N; ++i) mp[i].resize(M);
  while (n >= 0) {
    if (M == 4) {
      if (n % 2)
        mp[n][1] = val[u++], mp[n][3] = val[u++], mp[n][0] = val[u++],
        mp[n][2] = val[u++];
      else
        mp[n][2] = val[u++], mp[n][0] = val[u++], mp[n][3] = val[u++],
        mp[n][1] = val[u++];
    } else {
      int dir = n % 2;
      int dir2 = (n + 1) % 2;
      for (int i = dir; i < M; i += 2) mp[n][i] = val[u++];
      for (int i = dir2; i < M; i += 2) mp[n][i] = val[u++];
    }
    n--;
  }
  cout << "YES\n";
  if (swapped) {
    for (int i = 0; i < M; ++i) {
      for (int j = 0; j < N; ++j) cout << mp[j][i] << ' ';
      cout << '\n';
    }
  } else {
    for (int i = 0; i < N; ++i) {
      for (int j = 0; j < M; ++j) cout << mp[i][j] << ' ';
      cout << '\n';
    }
  }
  return 0;
}
