#include <bits/stdc++.h>
using namespace std;
int a[10][10];
int vec[100][100];
int stk[10][10];
int n, m;
const int dl[] = {-1, 0, 1, 0};
const int dc[] = {0, 1, 0, -1};
bool verif() {
  int i, j;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      for (int dir = 0; dir <= 3; dir++) {
        int nl = i + dl[dir];
        int nc = j + dc[dir];
        if (vec[stk[i][j]][stk[nl][nc]] == 1) {
          return 0;
        }
      }
    }
  }
  return 1;
}
void bkt(int k) {
  if (k == n * m + 1) {
    if (verif()) {
      cout << "YES\n";
      int i, j;
      for (i = 1; i <= n; i++) {
        for (j = 1; j <= m; j++) cout << stk[i][j] << " ";
        cout << "\n";
      }
      exit(0);
    }
    return;
  }
  int i, j;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      if (stk[i][j] == 0) {
        stk[i][j] = k;
        bkt(k + 1);
        stk[i][j] = 0;
      }
    }
  }
}
int v[100001];
int rez[100001];
int CAZ;
int cod(int i, int j) {
  if (CAZ == 1) return (i - 1) * m + j;
  return (i - 1) * n + j;
}
int cod2(int i, int j) { return (i - 1) * m + j; }
void afis(int v[]) {
  int cr = 1;
  int i, j;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) cout << v[cr++] << " ";
    cout << "\n";
  }
}
int main() {
  cin >> n >> m;
  if (n == 1 && m == 1) {
    cout << "YES\n";
    cout << "1\n";
    return 0;
  }
  if (min(n, m) == 1 && max(n, m) >= 4) {
    cout << "YES\n";
    int mx = n * m;
    int cr = 2;
    int i, j;
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= m; j++) {
        if (cr <= mx) {
          cout << cr << " ";
          cr += 2;
          if (cr > mx) cr = 1;
        }
      }
      cout << "\n";
    }
    return 0;
  }
  if (max(n, m) >= 4) {
    cout << "YES\n";
    int i, j;
    int nx = n;
    int mx = m;
    int cr = 1;
    if (n < 4) {
      nx = m;
      mx = n;
      CAZ = 2;
      for (i = 1; i <= n; i++) {
        for (j = 1; j <= m; j++) v[cod(j, n - i + 1)] = (cr++);
      }
    } else {
      CAZ = 1;
      for (i = 1; i <= n; i++) {
        for (j = 1; j <= m; j++) {
          v[cr] = cr;
          cr++;
        }
      }
    }
    cr = 1;
    for (i = 1; i <= nx; i += 2) {
      int aux = v[cod(i, mx)];
      for (j = mx; j > 1; j--) v[cod(i, j)] = v[cod(i, j - 1)];
      v[cod(i, 1)] = aux;
    }
    for (j = 1; j <= mx; j += 2) {
      int aux1 = v[cod(1, j)];
      int aux2 = v[cod(2, j)];
      for (i = 1; i + 2 <= nx; i++) v[cod(i, j)] = v[cod(i + 2, j)];
      v[cod(nx - 1, j)] = aux1;
      v[cod(nx, j)] = aux2;
    }
    if (nx == n)
      afis(v);
    else {
      for (i = 1; i <= nx; i++) {
        for (j = 1; j <= mx; j++) rez[cod2(mx - j + 1, i)] = v[cod(i, j)];
      }
      afis(rez);
    }
    return 0;
  }
  int cr = 1;
  int i, j;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) a[i][j] = (cr++);
  }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      for (int dir = 0; dir < 4; dir++)
        vec[a[i][j]][a[i + dl[dir]][j + dc[dir]]] = 1;
      vec[a[i][j]][0] = 0;
    }
  }
  bkt(1);
  cout << "NO\n";
  return 0;
}
