#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 10;
const int MOD = 1e9 + 7;
const int P = 239017;
const long long BINF = 1e18 + 10;
const long double PI = acos(-1);
const int N = 1e5 + 10;
int n, m;
vector<vector<int> > arr;
set<int> sm[N];
bool check(vector<int> r) {
  int cur = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      arr[i][j] = r[cur];
      cur++;
    }
  }
  cur = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      if (i > 1) {
        if (sm[r[cur]].find(arr[i - 1][j]) != sm[r[cur]].end()) {
          return false;
        }
      }
      if (j > 1) {
        if (sm[r[cur]].find(arr[i][j - 1]) != sm[r[cur]].end()) {
          return false;
        }
      }
      if (i < n) {
        if (sm[r[cur]].find(arr[i + 1][j]) != sm[r[cur]].end()) {
          return false;
        }
      }
      if (j < m) {
        if (sm[r[cur]].find(arr[i][j + 1]) != sm[r[cur]].end()) {
          return false;
        }
      }
      cur++;
    }
  }
  return true;
}
void out(vector<int> r) {
  cout << "YES" << endl;
  int cur = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      cout << r[cur] << ' ';
      cur++;
    }
    cout << endl;
  }
}
inline void source() {
  vector<int> r;
  cin >> n >> m;
  arr.resize(n + 10);
  int cur = 0;
  for (int i = 1; i <= n; i++) {
    arr[i].resize(m + 10);
    for (int j = 1; j <= m; j++) {
      cur++;
      arr[i][j] = cur;
    }
  }
  cur = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      cur++;
      if (i > 1) {
        sm[cur].insert(arr[i - 1][j]);
      }
      if (j > 1) {
        sm[cur].insert(arr[i][j - 1]);
      }
      if (i < n) {
        sm[cur].insert(arr[i + 1][j]);
      }
      if (j < m) {
        sm[cur].insert(arr[i][j + 1]);
      }
    }
  }
  if (m % 2 == 0 && n != 1) {
    int L = 1, R = n * m;
    for (int i = 1; i <= n * m; i++) {
      if (i & 1) {
        r.push_back(L);
        L++;
      } else {
        r.push_back(R);
        R--;
      }
    }
    if (check(r)) {
      out(r);
      exit(0);
    }
  } else {
    int L = n * m - 1, R = n * m;
    if (L & 1) {
      swap(L, R);
    }
    while (L > 0) {
      r.push_back(L);
      L -= 2;
    }
    while (R > 0) {
      r.push_back(R);
      R -= 2;
    }
    if (check(r)) {
      out(r);
      exit(0);
    }
  }
  for (;;) {
    if (clock() / (double)CLOCKS_PER_SEC >= 1.9) {
      cout << "NO" << endl;
      exit(0);
    }
    random_shuffle((r).begin(), (r).end());
    if (check(r)) {
      out(r);
      exit(0);
    }
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  srand(time(0));
  source();
  return 0;
}
