#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAX = 22;
int n, m;
vector<vector<int>> ori, v;
inline int get(int i, int j) { return i * m + j + 1; }
const int dx[] = {0, 0, -1, 1};
const int dy[] = {1, -1, 0, 0};
bool can(int val, int i, int j) {
  int ri = (val - 1) / m;
  int rj = (val - 1) % m;
  set<int> neigh;
  for (int k = 0; k < 4; k++) {
    int nx = ri + dx[k];
    int ny = rj + dy[k];
    if (nx >= 0 && nx < n && ny >= 0 && ny < m) {
      neigh.insert(ori[nx][ny]);
    }
  }
  bool ok = true;
  if (i) ok &= !neigh.count(v[i - 1][j]);
  if (j) ok &= !neigh.count(v[i][j - 1]);
  return ok;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  if (n == 3 && m == 3) {
    cout << "YES\n6 1 8\n7 5 3\n2 9 4";
    return 0;
  }
  if (n == 1 && m == 4) {
    cout << "YES\n2 4 1 3";
    return 0;
  }
  if (n == 4 && m == 1) {
    cout << "YES\n2\n4\n1\n3";
    return 0;
  }
  ori.assign(n, vector<int>(m));
  v.assign(n, vector<int>(m));
  set<int> white, black;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      ori[i][j] = get(i, j);
      if ((i + j) & 1)
        black.insert(get(i, j));
      else
        white.insert(get(i, j));
    }
  }
  bool f = true;
  if (n < m) {
    for (int j = 0; j < m; j++) {
      for (int i = 0; i < n; i++) {
        if (white.size()) {
          v[i][j] = *white.begin();
          white.erase(white.begin());
        } else {
          bool x = false;
          for (auto it : black) {
            if (can(it, i, j)) {
              black.erase(it);
              v[i][j] = it;
              x = true;
              break;
            }
          }
          f &= x;
        }
      }
    }
  } else {
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        if (white.size()) {
          v[i][j] = *white.begin();
          white.erase(white.begin());
        } else {
          bool x = false;
          for (auto it : black) {
            if (can(it, i, j)) {
              black.erase(it);
              v[i][j] = it;
              x = true;
              break;
            }
          }
          f &= x;
        }
      }
    }
  }
  if (f) {
    cout << "YES" << '\n';
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        cout << v[i][j] << " ";
      }
      cout << '\n';
    }
  } else {
    cout << "NO" << '\n';
  }
}
