#include <bits/stdc++.h>
using namespace std;
void doit(vector<int>& v, bool p) {
  vector<int> ans;
  ans.reserve(v.size());
  if (v.size() % 2) {
    if (p) {
      for (int i = 5; i < (int)v.size(); i += 2) {
        ans.push_back(v[i]);
      }
      ans.push_back(v[1]);
      ans.push_back(v[3]);
      ans.push_back(v[0]);
      ans.push_back(v[2]);
      ans.push_back(v[4]);
      for (int i = 6; i < (int)v.size(); i += 2) {
        ans.push_back(v[i]);
      }
    } else {
      for (int i = 6; i < (int)v.size(); i += 2) {
        ans.push_back(v[i]);
      }
      ans.push_back(v[3]);
      ans.push_back(v[1]);
      ans.push_back(v[4]);
      ans.push_back(v[0]);
      ans.push_back(v[2]);
      for (int i = 5; i < (int)v.size(); i += 2) {
        ans.push_back(v[i]);
      }
    }
  } else {
    if (p) {
      for (int i = 4; i < (int)v.size(); i += 2) {
        ans.push_back(v[i]);
      }
      ans.push_back(v[2]);
      ans.push_back(v[0]);
      ans.push_back(v[3]);
      ans.push_back(v[1]);
      for (int i = 5; i < (int)v.size(); i += 2) {
        ans.push_back(v[i]);
      }
    } else {
      for (int i = 5; i < (int)v.size(); i += 2) {
        ans.push_back(v[i]);
      }
      ans.push_back(v[1]);
      ans.push_back(v[3]);
      ans.push_back(v[0]);
      ans.push_back(v[2]);
      for (int i = 4; i < (int)v.size(); i += 2) {
        ans.push_back(v[i]);
      }
    }
  }
  for (int i = 0; i < (ans.size()); i++) v[i] = ans[i];
}
int main(int argc, char* argv[]) {
  int N, M;
  scanf("%d%d", &N, &M);
  if (N == 1 && M == 1) {
    printf("YES\n1\n");
    return 0;
  }
  if (N == 3 && M == 3) {
    printf("YES\n");
    printf("5 3 8\n");
    printf("7 1 6\n");
    printf("2 9 4\n");
    return 0;
  }
  if (N <= 3 && M <= 3) {
    printf("NO\n");
    return 0;
  }
  vector<vector<int> > ans(N);
  for (int i = 0; i < (N); i++) ans[i].resize(M);
  if (M >= 4) {
    for (int i = 0; i < (N); i++) {
      vector<int> row;
      for (int j = 0; j < (M); j++) row.push_back(M * i + j + 1);
      doit(row, i % 2);
      for (int j = 0; j < (M); j++) ans[i][j] = row[j];
    }
  } else {
    for (int j = 0; j < (M); j++) {
      vector<int> col;
      for (int i = 0; i < (N); i++) col.push_back(M * i + j + 1);
      doit(col, j % 2);
      for (int i = 0; i < (N); i++) ans[i][j] = col[i];
    }
  }
  printf("YES\n");
  for (int i = 0; i < (N); i++) {
    for (int j = 0; j < (M); j++) {
      if (j) printf(" ");
      printf("%d", ans[i][j]);
    }
    printf("\n");
  }
  return 0;
}
