#include <bits/stdc++.h>
using namespace std;
int next() {
  int x;
  cin >> x;
  return x;
}
long long lnext() {
  long long x;
  cin >> x;
  return x;
}
int main() {
  cout.precision(20);
  ios_base::sync_with_stdio(false);
  int n = next();
  int m = next();
  bool sw = false;
  if (n > m) {
    swap(n, m);
    sw = true;
  }
  if (m == 1) {
    cout << "YES\n";
    cout << 1 << "\n";
  } else if (m == 2) {
    cout << "NO\n";
  } else if (m == 3) {
    if (n <= 2) {
      cout << "NO\n";
    } else {
      cout << "YES\n";
      cout << "6 1 8\n";
      cout << "7 5 3\n";
      cout << "2 9 4\n";
    }
  } else {
    vector<vector<int>> answ(n, vector<int>(m));
    vector<int> col(m);
    for (int i = 0; i < m / 2; i++) col[m - m / 2 + i] = i + 1;
    for (int i = 0; i < m - m / 2; i++) col[i] = m / 2 + i + 1;
    for (int i = 0; i < n / 2 * 2; i++)
      for (int j = 0; j < m; j++)
        answ[i][j] = (i % 2 ? j + 1 + m * i : col[j] + m * i);
    if (n % 2)
      for (int j = 0; j < m; j++)
        answ[n - 1][j] = (n - 1) * m + (j % 2 ? j / 2 + 1 : m / 2 + j / 2 + 1);
    for (int i = 0; i < n - 1; i += 2)
      for (int j = 0; j < m; j += 2) swap(answ[i][j], answ[i + 1][j]);
    cout << "YES\n";
    if (sw) {
      for (int j = 0; j < m; j++) {
        for (int i = 0; i < n; i++) {
          int val = answ[i][j] - 1;
          val = val / m + val % m * n + 1;
          cout << val << " ";
        }
        cout << "\n";
      }
    } else {
      for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) cout << answ[i][j] << " ";
        cout << "\n";
      }
    }
  }
}
