#include <bits/stdc++.h>
inline int read() {
  char ch = getchar();
  int u = 0, f = 1;
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    u = u * 10 + ch - 48;
    ch = getchar();
  }
  return u * f;
}
int n, m;
std::vector<int> map_asfknas[100100];
int __sdkjanhsf[100100];
bool check(int a, int b) {
  if (abs(a - b) == m) return 1;
  if (b % m)
    if (b + 1 == a) return 1;
  if (a % m)
    if (a + 1 == b) return 1;
  return 0;
}
void asfkolasnhf(int p, int x, int y, int id) {
  if (y == m) {
    asfkolasnhf(p, x + 1, 0, id);
    return;
  }
  if (p == n * m) {
    printf("YES\n");
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) printf("%d ", map_asfknas[i][j]);
      printf("\n");
    }
    exit(0);
  }
  bool _sjnagfs_snjas__sdj = true;
  for (int i = id; i <= m * n; i++) {
    if (_sjnagfs_snjas__sdj) id = i;
    if (__sdkjanhsf[i]) continue;
    _sjnagfs_snjas__sdj = 0;
    if (x && check(map_asfknas[x - 1][y], i))
      continue;
    else if (y && check(map_asfknas[x][y - 1], i))
      continue;
    map_asfknas[x][y] = i;
    __sdkjanhsf[i]++;
    asfkolasnhf(p + 1, x, y + 1, id);
    __sdkjanhsf[i]--;
  }
}
inline void Init() {
  n = read();
  m = read();
}
inline void Solve() { asfkolasnhf(0, 0, 0, 1); }
int main() {
  Init();
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) map_asfknas[i].push_back(0);
  Solve();
  puts("NO");
  return 0;
}
