#include <bits/stdc++.h>
using namespace std;
constexpr int ps = 100005, as = 100001;
int n, m;
int a[as];
int nei(int st1, int st2) {
  return st1 > st2 ? st1 - st2 == 1 || st1 - st2 == m
                   : st2 - st1 == 1 || st2 - st1 == m;
}
int check(int pos) {
  int res = 0;
  res += pos >= m && nei(a[pos - m], a[pos]);
  res += pos % m >= 1 && nei(a[pos - 1], a[pos]);
  res += pos < (n - 1) * m && nei(a[pos + m], a[pos]);
  res += pos % m < m - 1 && nei(a[pos + 1], a[pos]);
  return res;
}
int main() {
  cin.tie(0), ios::sync_with_stdio(0);
  srand(time(0));
  cin >> n >> m;
  if (max(n, m) <= 3 && min(n, m) < 3 && n * m != 1) {
    return cout << "NO\n", 0;
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      a[i * m + j] = i * m + j + 1;
    }
  }
  int err = (m - 1) * n + m * (n - 1);
  while (err) {
    int cind = (0u + rand() * RAND_MAX + rand()) % (n * m),
        nind = (0u + rand() * RAND_MAX + rand()) % (n * m) % 3;
    int prv = check(cind) + check(nind);
    swap(a[cind], a[nind]);
    if (check(cind) + check(nind) > prv) {
      swap(a[cind], a[nind]);
    } else {
      err += check(cind) + check(nind) - prv;
    }
  }
  cout << "YES\n";
  for (int i = 0; i < n; ++i, cout << '\n') {
    for (int j = 0; j < m; ++j) {
      cout << a[i * m + j] << ' ';
    }
  }
  return 0;
}
