#include <bits/stdc++.h>
using namespace std;
int a[320][100010], b[320][100010];
int k, n, m;
bool flag;
void NO() {
  printf("NO\n");
  exit(0);
}
void change() {
  if (m >= 4) {
    k = 0;
    for (int j = 2; j <= m; j += 2) {
      k++;
      for (int i = 1; i <= n; i++) b[i][k] = a[i][j];
    }
    for (int j = 1; j <= m; j += 2) {
      k++;
      for (int i = 1; i <= n; i++) b[i][k] = a[i][j];
    }
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) a[i][j] = b[i][j];
  }
}
void solve() {
  if (n == 1 && m == 1) return;
  if (n <= 2 && m <= 3) NO();
  if (n == 3 && m == 3) {
    b[1][1] = a[1][1];
    b[1][2] = a[3][3];
    b[1][3] = a[2][2];
    b[2][1] = a[2][3];
    b[2][2] = a[1][2];
    b[2][3] = a[3][1];
    b[3][1] = a[3][2];
    b[3][2] = a[2][1];
    b[3][3] = a[1][3];
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) a[i][j] = b[i][j];
    return;
  }
  if (n == 1) {
    change();
    return;
  }
  for (int i = 2; i <= n; i += 2) {
    for (int j = 1; j <= m; j++) swap(a[i][j], a[i][1]);
    for (int j = 1; j <= m; j++) swap(a[i][j], a[i][1]);
  }
  for (int i = 2; i <= m; i += 2) {
    for (int j = 1; j <= n; j++) swap(a[j][i], a[1][i]);
  }
}
int main() {
  scanf("%d%d", &n, &m);
  if (n <= m)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) a[i][j] = (i - 1) * m + j;
  if (n > m) {
    flag = 1;
    swap(n, m);
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) a[i][j] = (j - 1) * n + i;
  }
  solve();
  printf("YES\n");
  if (flag) {
    for (int i = 1; i <= m; i++)
      for (int j = 1; j <= n; j++) printf("%d%c", a[j][i], j == n ? '\n' : ' ');
  } else {
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) printf("%d%c", a[i][j], j == m ? '\n' : ' ');
  }
  return 0;
}
