#include <bits/stdc++.h>
using namespace std;
const int N = 111111;
int ans33[] = {1, 5, 7, 3, 9, 2, 8, 4, 6};
int ans14[] = {2, 4, 1, 3};
int ans24[] = {1, 3, 5, 7, 4, 6, 8, 2};
int ans42[] = {1, 4, 5, 8, 2, 3, 6, 7};
int ans34[] = {1, 3, 5, 2, 4, 6, 12, 9, 11, 8, 10, 7};
int ans44[] = {1, 3, 5, 7, 2, 4, 6, 8, 9, 11, 13, 15, 10, 12, 14, 16};
int a[N];
int n, m;
signed main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  bool sw = false;
  if (n == 1 && m == 1) {
    cout << "YES" << endl;
    cout << 1 << endl;
    return 0;
  }
  if (n == 1 && m == 2 || n == 2 && m == 2 || n == 1 && m == 3 ||
      n == 2 && m == 3 || n == 3 && m == 2 || n == 3 && m == 1 ||
      n == 2 && m == 1) {
    cout << "NO" << endl;
    return 0;
  } else if (n == 3 && m == 3) {
    copy(ans33, ans33 + 9, a + 1);
  } else if (n == 1 && m == 4 || n == 4 && m == 1) {
    copy(ans14, ans14 + 4, a + 1);
  } else if (n == 2 && m == 4) {
    copy(ans24, ans24 + 8, a + 1);
  } else if (n == 1 || m == 1) {
    int s = max(n, m);
    for (int j = (1); j <= (s); j++) {
      a[j] = j > (s + 1) / 2 ? (j - (s + 1) / 2) * 2 : j * 2 - 1;
    }
  } else if (n > m) {
    for (int i = (1); i <= (n * m); i++) {
      a[i] = i;
    }
    for (int i = (1); i <= (n); i++) {
      if (i & 1) continue;
      int x = a[i * m - m + 1];
      for (int j = (1); j <= (m); j++) {
        int jj = j % m + 1;
        a[i * m - m + j] = j == m ? x : a[i * m - m + jj];
      }
    }
    for (int j = (1); j <= (m); j++) {
      if (j % 2 == 0) continue;
      int x = a[j], y = a[j + m];
      for (int i = (1); i <= (n); i++) {
        int ii = (i + 1) % n + 1;
        a[i * m - m + j] = i == n ? y : (i == n - 1 ? x : a[ii * m - m + j]);
      }
    }
  } else {
    for (int i = (1); i <= (n * m); i++) {
      a[i] = i;
    }
    for (int i = (1); i <= (n); i++) {
      if (i & 1) continue;
      int x = a[i * m - m + 1];
      int y = a[i * m - m + 2];
      for (int j = (1); j <= (m); j++) {
        int jj = (j + 1) % m + 1;
        a[i * m - m + j] = j == m - 1 ? x : (j == m ? y : a[i * m - m + jj]);
      }
    }
    for (int j = (1); j <= (m); j++) {
      if (j % 2 == 0) continue;
      int x = a[j];
      for (int i = (1); i <= (n); i++) {
        int ii = i % n + 1;
        a[i * m - m + j] = i == n ? x : a[ii * m - m + j];
      }
    }
  }
  cout << "YES" << endl;
  if (sw) {
    swap(n, m);
  }
  for (int i = (1); i <= (n); i++) {
    for (int j = (1); j <= (m); j++) {
      int x = sw ? j * n - n + i : i * m - m + j;
      cout << a[x] << " ";
    }
    cout << endl;
  }
  return 0;
}
