#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
int N, M;
vector<vector<int> > A;
void solve(bool row) {
  if (row) {
    for (int i = 0; i < N; i++) {
      vector<int> vi, vj;
      for (int j = 0; j < M; j++) {
        if (j % 2 == 0)
          vi.push_back(A[i][j]);
        else
          vj.push_back(A[i][j]);
      }
      if (i % 2 == 0) swap(vi, vj);
      if (M % 2 == 0 && i % 2 != 0) {
        reverse(vi.begin(), vi.end());
        reverse(vj.begin(), vj.end());
      }
      for (int j = 0; j < vi.size(); j++) A[i][j] = vi[j];
      for (int j = 0; j < vj.size(); j++) A[i][vi.size() + j] = vj[j];
    }
  } else {
    for (int j = 0; j < M; j++) {
      vector<int> vi, vj;
      for (int i = 0; i < N; i++) {
        if (i % 2 == 0)
          vi.push_back(A[i][j]);
        else
          vj.push_back(A[i][j]);
      }
      if (j % 2 == 0) swap(vi, vj);
      if (N % 2 == 0 && j % 2 != 0) {
        reverse(vi.begin(), vi.end());
        reverse(vj.begin(), vj.end());
      }
      for (int i = 0; i < vi.size(); i++) A[i][j] = vi[i];
      for (int i = 0; i < vj.size(); i++) A[vi.size() + i][j] = vj[i];
    }
  }
}
int main() {
  cin >> N >> M;
  A = vector<vector<int> >(N, vector<int>(M, 0));
  for (int i = 0, c = 1; i < N; i++) {
    for (int j = 0; j < M; j++) {
      A[i][j] = c++;
    }
  }
  if (N * M == 1) {
    cout << "YES" << endl;
    cout << 1 << endl;
    return 0;
  }
  if (N == 3 and M == 3) {
    cout << "YES" << endl;
    cout << "6 1 8" << endl;
    cout << "7 5 3" << endl;
    cout << "2 9 4" << endl;
    return 0;
  }
  if (N <= 3 && M <= 3) {
    cout << "NO" << endl;
    return 0;
  }
  cout << "YES" << endl;
  solve(M >= 4);
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) {
      cout << A[i][j] << " ";
    }
    cout << endl;
  }
  return 0;
}
