#include <bits/stdc++.h>
using namespace std;
using LL = int64_t;
using LD = long double;
const LL INF = 0x3f3f3f3f;
const LL mod = 1e9 + 7;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  if (n == 1 && m == 1)
    cout << "YES\n" << 1 << '\n';
  else if (n == 1) {
    if (m <= 3)
      cout << "NO\n";
    else {
      cout << "YES\n";
      for (int i = 2; i <= m; i += 2) cout << i << ' ';
      for (int i = 1; i <= m; i += 2) cout << i << " \n"[i + 2 > m];
    }
  } else if (m == 1) {
    if (n <= 3)
      cout << "NO\n";
    else {
      cout << "YES\n";
      for (int i = 2; i <= n; i += 2) cout << i << '\n';
      for (int i = 1; i <= n; i += 2) cout << i << '\n';
    }
  } else if (n == 3 && m == 3) {
    cout << R"(YES
6 1 8
7 5 3
2 9 4
)";
  } else if (n <= 3 && m <= 3)
    cout << "NO\n";
  else if (n < m) {
    cout << "YES\n";
    vector<vector<int>> a(n), ans(n);
    for (auto& i : a) i.resize(m);
    for (auto& i : ans) i.resize(m);
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) a[i][j] = i * m + j + 1;
      rotate(a[i].begin(), a[i].begin() + (2 * i) % m, a[i].end());
    }
    for (int j = 0; j < m; j++) {
      for (int i = 0; i < n; i++) {
        ans[i][j] = a[(i + j) % n][j];
      }
    }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        cout << ans[i][j] << " \n"[j == m - 1];
      }
    }
  } else {
    cout << "YES\n";
    vector<vector<int>> a(n), ans(n);
    for (auto& i : a) i.resize(m);
    for (auto& i : ans) i.resize(m);
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) a[i][j] = i * m + j + 1;
    }
    for (int j = 0; j < m; j++) {
      for (int i = 0; i < n; i++) {
        ans[i][j] = a[(i + 2 * j) % n][j];
      }
    }
    for (int i = 0; i < n; i++)
      rotate(ans[i].begin(), ans[i].begin() + i % m, ans[i].end());
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        cout << ans[i][j] << " \n"[j == m - 1];
      }
    }
  }
}
