#include <bits/stdc++.h>
using namespace std;
void solve1(int n, int m) {
  cout << "YES\n";
  if (max(n, m) == 4) {
    if (m == 4)
      cout << "3 1 4 2\n";
    else
      cout << "3\n1\n4\n2\n";
  } else {
    if (n == 1) {
      for (int j = 1; j <= m; j += 2) cout << j << " ";
      for (int j = 2; j <= m; j += 2) cout << j << " ";
      cout << endl;
    } else {
      for (int i = 1; i <= n; i += 2) cout << i << "\n";
      for (int i = 2; i <= n; i += 2) cout << i << "\n";
    }
  }
}
void solve2(int n, int m) {
  if (n * m <= 6) {
    cout << "NO\n";
    return;
  }
  if (n == 3 && m == 3) {
    cout << "YES\n6 1 8\n7 5 3\n2 9 4\n";
    return;
  }
  int dp[n][m], a[m], b[n];
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) dp[i][j] = i * m + j + 1;
  for (int i = 1; i < n; i += 2) {
    for (int j = 0; j < m; j++) a[(j + m / 2) % m] = dp[i][j];
    for (int j = 0; j < m; j++) dp[i][j] = a[j];
  }
  for (int j = 1; j < m; j += 2) {
    for (int i = 0; i < n; i++) b[(i + n / 2) % n] = dp[i][j];
    for (int i = 0; i < n; i++) dp[i][j] = b[i];
  }
  cout << "YES\n";
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) cout << dp[i][j] << " ";
    cout << "\n";
  }
}
int main() {
  int n, m;
  cin >> n >> m;
  if (n == 1 || m == 1) {
    if (max(n, m) > 3)
      solve1(n, m);
    else {
      if (n == 1 && m == 1)
        cout << "YES\n1\n";
      else
        cout << "NO\n";
    }
  } else
    solve2(n, m);
}
