#include <bits/stdc++.h>
using namespace std;
const long long inf = (1ll << 62);
const long long mod = 1e9 + 7;
const int MX = 1e5 + 9;
int n, m, id1 = 1, id2 = 2;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
vector<int> v[MX], cant[MX], v1;
void out() {
  puts("NO");
  exit(0);
}
void build() {
  for (int i = 0; i < n; i++) v[i].clear();
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      v[i].push_back(i * m + j + 1);
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      for (int k = 0; k < 4; k++) {
        int nx = i + dx[k], ny = j + dy[k];
        if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
        cant[v[i][j]].push_back(v[nx][ny]);
      }
    }
  }
}
bool check() {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      for (int k = 0; k < 4; k++) {
        int nx = i + dx[k], ny = j + dy[k];
        if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
        int cur = v[nx][ny];
        for (auto pp : cant[v[i][j]])
          if (cur == pp) return 0;
      }
    }
  }
  return 1;
}
int main() {
  cin >> n >> m;
  if (n * m == 1) {
    puts("YES");
    cout << 1 << endl;
    return 0;
  }
  if (n == 2 && m == 2) out();
  if (n == 3 && m == 3) {
    puts("YES");
    cout << 4 << " " << 6 << " " << 8 << endl;
    cout << 3 << " " << 7 << " " << 2 << endl;
    cout << 1 << " " << 5 << " " << 9 << endl;
    return 0;
  }
  if (n == 2 && m == 1) out();
  if (n == 1 && m == 2) out();
  if (n == 2 && m == 2) out();
  if (n == 1 && m == 2) out();
  if (n == 1 && m == 3) out();
  if (n == 3 && m == 1) out();
  if (n == 1) {
    puts("YES");
    int ind = m;
    if (ind % 2 == 0) ind--;
    for (ind; ind >= 1; ind -= 2) cout << ind << " ";
    ind = m;
    if (ind % 2 == 1) ind--;
    for (ind; ind >= 2; ind -= 2) cout << ind << " ";
    puts("");
    return 0;
  }
  if (m == 1) {
    puts("YES");
    int ind = n;
    if (ind % 2 == 0) ind--;
    for (ind; ind >= 1; ind -= 2) cout << ind << endl;
    ind = n;
    if (ind % 2 == 1) ind--;
    for (ind; ind >= 2; ind -= 2) cout << ind << endl;
    puts("");
    return 0;
  }
  build();
  for (int i = 0; i < n; i += 2) {
    v1.clear();
    for (int j = 0; j < m; j++) {
      int ind = j - 1;
      if (ind < 0) ind += m;
      v1.push_back(v[i][ind]);
    }
    v[i] = v1;
  }
  for (int i = 0; i < m; i += 2) {
    v1.clear();
    for (int j = 0; j < n; j++) {
      int ind = j - 2;
      if (ind < 0) ind += n;
      v1.push_back(v[ind][i]);
    }
    for (int j = 0; j < n; j++) v[j][i] = v1[j];
  }
  if (check()) {
    puts("YES");
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        cout << v[i][j] << " ";
      }
      puts("");
    }
    return 0;
  }
  build();
  for (int i = 0; i < n; i += 2) {
    v1.clear();
    for (int j = 0; j < m; j++) {
      int ind = j - 2;
      if (ind < 0) ind += m;
      v1.push_back(v[i][ind]);
    }
    v[i] = v1;
  }
  for (int i = 0; i < m; i += 2) {
    v1.clear();
    for (int j = 0; j < n; j++) {
      int ind = j - 1;
      if (ind < 0) ind += n;
      v1.push_back(v[ind][i]);
    }
    for (int j = 0; j < n; j++) v[j][i] = v1[j];
  }
  if (check()) {
    puts("YES");
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        cout << v[i][j] << " ";
      }
      puts("");
    }
    return 0;
  }
  puts("NO");
}
