#include <bits/stdc++.h>
using namespace std;
const int N = 100100;
int n, m;
bool isfriend(int a, int b) {
  return b == a + m || b == a - m || b == a + 1 || b == a - 1;
}
bool valid(vector<int>& v) {
  for (int i = 0; i < n * m; i++) {
    if (i % m && isfriend(v[i], v[i - 1])) return 0;
    if ((i + 1) % m && isfriend(v[i], v[i + 1])) return 0;
    if (i >= m && isfriend(v[i], v[i - m])) return 0;
    if (i + m < n * m && isfriend(v[i], v[i + m])) return 0;
  }
  return 1;
}
void finish(vector<int>& v) {
  printf("YES\n");
  for (int i = 0; i < n * m; i++)
    printf("%d%c", v[i], (i + 1) % m ? ' ' : '\n');
  exit(0);
}
int main() {
  scanf("%d%d", &n, &m);
  vector<int> ans, v1, v2;
  if (max(n, m) < 4) {
    for (int i = 1; i <= n * m; i++) ans.push_back(i);
    do {
      if (valid(ans)) finish(ans);
    } while (next_permutation(ans.begin(), ans.end()));
    return printf("NO\n"), 0;
  }
  if (m >= n) {
    if (m == 4) {
      v1.push_back(2);
      v1.push_back(4);
      v1.push_back(1);
      v1.push_back(3);
      v2 = v1;
      reverse(v2.begin(), v2.end());
    } else {
      for (int c = 2; c <= m; c += 2) v1.push_back(c);
      for (int c = 1; c <= m; c += 2) v1.push_back(c), v2.push_back(c);
      for (int c = 2; c <= m; c += 2) v2.push_back(c);
    }
    for (int it = 0; it < n; ++it) {
      if (it & 1)
        for (int x : v2) ans.push_back(it * m + x);
      else
        for (int x : v1) ans.push_back(it * m + x);
    }
  } else {
    if (n == 4) {
      v1.push_back(1 + m);
      v1.push_back(1 + 3 * m);
      v1.push_back(1);
      v1.push_back(1 + 2 * m);
      v2 = v1;
      reverse(v2.begin(), v2.end());
    } else {
      for (int c = 1; c <= n * m; c += 2 * m) v1.push_back(c);
      for (int c = 1 + m; c <= n * m; c += 2 * m)
        v1.push_back(c), v2.push_back(c);
      for (int c = 1; c <= n * m; c += 2 * m) v2.push_back(c);
    }
    for (int j = 0; j < n; ++j) {
      for (int it = 0; it < m; ++it) {
        if (it & 1)
          ans.push_back(v2[j] + it);
        else
          ans.push_back(v1[j] + it);
      }
    }
  }
  finish(ans);
  return 0;
}
