#include <bits/stdc++.h>
using namespace std;
int n, m;
map<pair<int, int>, int> a;
int cal(int a, int b) {
  if (a == 0 || a == n + 1 || b == 0 || b == m + 1) return -100;
  return m * (a - 1) + b;
}
bool chk(int x, int y) {
  int x_m = a[make_pair(x - 1, y)], y_m = a[make_pair(x, y - 1)];
  int tmp = a[make_pair(x, y)];
  int x_t = (tmp - 1) / m + 1, y_t = (tmp % m == 0) ? m : tmp % m;
  int x_2 = cal(x_t - 1, y_t), x_3 = cal(x_t + 1, y_t);
  int y_2 = cal(x_t, y_t - 1), y_3 = cal(x_t, y_t + 1);
  if (x_m == x_2 || x_m == y_2 || x_m == x_3 || x_m == y_3) return false;
  if (y_m == x_2 || y_m == y_2 || y_m == x_3 || y_m == y_3) return false;
  return true;
}
bool bk(int x, int y) {
  if (x == n + 1) return true;
  for (int i = x; i <= n; ++i)
    for (int j = 1; j <= m; ++j) {
      if (i == x && j == 1 && y != 1) {
        j = y - 1;
        continue;
      }
      swap(a[make_pair(x, y)], a[make_pair(i, j)]);
      if (chk(x, y)) {
        int x_1 = x, y_1 = y;
        if (y_1 == m)
          x_1++, y_1 = 1;
        else
          y_1++;
        if (bk(x_1, y_1)) return true;
      }
      swap(a[make_pair(x, y)], a[make_pair(i, j)]);
    }
  return false;
}
int main() {
  cin >> n >> m;
  int cnt = 1;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      a[make_pair(i, j)] = cnt;
      cnt++;
    }
  }
  if (!bk(1, 1))
    cout << "NO";
  else {
    cout << "YES" << endl;
    for (int i = 1; i <= n; ++i) {
      for (int j = 1; j <= m; ++j) cout << a[make_pair(i, j)] << " ";
      cout << endl;
    }
  }
}
