#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e5 + 10;
const long long INF = 1e18 + 10;
const long long mod = 1e9 + 7;
const int g[3][3] = {5, 7, 1, 9, 3, 8, 2, 4, 6};
int f[maxn], z[maxn];
void solve() {
  int n, m, cnt = 1;
  cin >> n >> m;
  if (n == m && n == 1) {
    cout << "YES" << endl;
    cout << 1 << endl;
    return;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      f[i * m + j] = cnt++;
    }
  }
  if (n == m && n == 3) {
    puts("YES");
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++) {
        cout << g[i][j];
        if (j == 2)
          cout << endl;
        else
          cout << " ";
      }
    }
  } else if (max(n, m) == 4) {
    puts("YES");
    if (n == 4) {
      for (int j = 0; j < m; j++) {
        if (j % 2) {
          swap(f[0 * m + j], f[1 * m + j]);
          swap(f[2 * m + j], f[3 * m + j]);
          swap(f[0 * m + j], f[3 * m + j]);
        } else {
          swap(f[0 * m + j], f[2 * m + j]);
          swap(f[1 * m + j], f[3 * m + j]);
          swap(f[0 * m + j], f[3 * m + j]);
        }
      }
    } else if (m == 4) {
      for (int i = 0; i < n; i++) {
        if (i % 2) {
          swap(f[i * m + 0], f[i * m + 1]);
          swap(f[i * m + 2], f[i * m + 3]);
          swap(f[i * m + 0], f[i * m + 3]);
        } else {
          swap(f[i * m + 0], f[i * m + 2]);
          swap(f[i * m + 1], f[i * m + 3]);
          swap(f[i * m + 0], f[i * m + 3]);
        }
      }
    }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        cout << f[i * m + j];
        if (j == m - 1)
          cout << endl;
        else
          cout << " ";
      }
    }
  } else if (max(n, m) >= 5) {
    puts("YES");
    int num = 0;
    if (m >= 5) {
      for (int i = 0; i < n; i++) {
        if (i % 2) {
          for (int j = 0; j < m; j += 2) z[num++] = f[i * m + j];
          for (int j = 1; j < m; j += 2) z[num++] = f[i * m + j];
        } else {
          for (int j = 1; j < m; j += 2) z[num++] = f[i * m + j];
          for (int j = 0; j < m; j += 2) z[num++] = f[i * m + j];
        }
      }
    } else if (n >= 5) {
      for (int j = 0; j < m; j++) {
        num = 0;
        if (j % 2) {
          for (int i = 0; i < n; i += 2) z[(num++) * m + j] = f[i * m + j];
          for (int i = 1; i < n; i += 2) z[(num++) * m + j] = f[i * m + j];
        } else {
          for (int i = 1; i < n; i += 2) z[(num++) * m + j] = f[i * m + j];
          for (int i = 0; i < n; i += 2) z[(num++) * m + j] = f[i * m + j];
        }
      }
    }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        cout << z[i * m + j];
        if (j == m - 1)
          cout << endl;
        else
          cout << " ";
      }
    }
  } else
    puts("NO");
}
int main() { solve(); }
