#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;
int n, m;
int a, b;
int *mat[N];
int main() {
  cin >> n >> m;
  a = max(n, m);
  b = min(n, m);
  if (a == 1) {
    puts("YES\n1");
    return 0;
  }
  if (a == 3 && b == 3) {
    puts("YES\n1 6 4\n5 7 2\n9 3 8");
    return 0;
  }
  if (a <= 3) {
    puts("NO");
    return 0;
  }
  for (int i = 0; i < b + 10; ++i) mat[i] = new int[a + 10];
  if (b == 1) {
    if (a == 4) {
      mat[1][1] = 2;
      mat[1][2] = 4;
      mat[1][3] = 1;
      mat[1][4] = 3;
    } else {
      int count = 0;
      for (int i = 1; i <= a; i += 2) mat[1][i] = ++count;
      for (int i = 2; i <= a; i += 2) mat[1][i] = ++count;
    }
  } else {
    for (int i = 1; i <= b; ++i) {
      if (i % 2 == 0) {
        for (int j = 1; j <= a; ++j) mat[i][(j + 1) % a + 1] = (i - 1) * a + j;
      } else {
        for (int j = 1; j <= a; ++j) mat[i][j] = (i - 1) * a + j;
      }
    }
    for (int j = 1; j <= a; ++j) mat[0][j] = mat[b][j];
    for (int i = b; i >= 1; --i)
      for (int j = 2; j <= a; j += 2) mat[i][j] = mat[i - 1][j];
  }
  puts("YES");
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      if (n < m)
        printf("%d ", mat[i][j]);
      else {
        int x = (mat[j][i] - 1) % a, y = (mat[j][i] - 1) / a;
        printf("%d ", x * m + y + 1);
      }
    }
    puts("");
  }
}
