#include <bits/stdc++.h>
using namespace std;
vector<int> A[100005];
int main() {
  int n, m, i, j;
  cin >> n >> m;
  if (n < 4 and m < 4) {
    bool adj[10][10] = {}, adj2[10][10];
    int A[n][m], B[n][m];
    for (i = 0; i < n; i++)
      for (j = 0; j < m; j++) A[i][j] = i * m + j + 1;
    for (i = 0; i < n; i++)
      for (j = 0; j < m; j++) {
        if (i - 1 >= 0) adj[A[i][j]][A[i - 1][j]] = 1;
        if (i + 1 < n) adj[A[i][j]][A[i + 1][j]] = 1;
        if (j - 1 >= 0) adj[A[i][j]][A[i][j - 1]] = 1;
        if (j + 1 < m) adj[A[i][j]][A[i][j + 1]] = 1;
      }
    vector<int> v;
    for (i = 1; i <= n * m; i++) v.push_back(i);
    do {
      memset(adj2, 0, sizeof adj2);
      for (i = 0; i < n * m; i++) B[i / m][i % m] = v[i];
      for (i = 0; i < n; i++)
        for (j = 0; j < m; j++) {
          if (i - 1 >= 0) adj2[B[i][j]][B[i - 1][j]] = 1;
          if (i + 1 < n) adj2[B[i][j]][B[i + 1][j]] = 1;
          if (j - 1 >= 0) adj2[B[i][j]][B[i][j - 1]] = 1;
          if (j + 1 < m) adj2[B[i][j]][B[i][j + 1]] = 1;
        }
      for (i = 1; i <= n * m; i++)
        for (j = 1; j <= n * m; j++)
          if (adj[i][j] and adj2[i][j]) {
            i = j = 1000000000;
            break;
          }
      if (i < 1000000000 and j < 1000000000) {
        cout << "YES" << '\n';
        for (i = 0; i < n; i++) {
          for (j = 0; j < m; j++) cout << B[i][j] << " ";
          cout << '\n';
        }
        return 0;
      }
    } while (next_permutation((v).begin(), (v).end()));
    cout << "NO";
    return 0;
  }
  if (n == 1 and m == 4) {
    cout << "YES" << '\n' << "2 4 1 3";
    return 0;
  }
  if (n == 4 and m == 1) {
    cout << "YES" << '\n' << "2\n4\n1\n3";
    return 0;
  }
  if (n == 2 and m == 4) {
    cout << "YES" << '\n' << "5 4 7 2\n3 6 1 8";
    return 0;
  }
  if (n == 4 and m == 2) {
    cout << "YES" << '\n' << "3 7\n8 4\n1 5\n6 2";
    return 0;
  }
  if (n == 3 and m == 4) {
    cout << "YES" << '\n' << "2 10 5 12\n7 1 3 6\n9 8 11 4";
    return 0;
  }
  if (n == 4 and m == 3) {
    cout << "YES" << '\n' << "3 8 1\n11 4 9\n6 10 5\n7 2 12";
    return 0;
  }
  if (n == 4 and m == 4) {
    cout << "YES" << '\n' << "5 4 7 2\n3 6 1 8\n13 12 15 10\n11 14 9 16";
    return 0;
  }
  if (n >= 5) {
    for (i = 0; i < n; i++)
      for (j = 0; j < m; j++) A[i].push_back(i * m + j + 1);
    vector<vector<int> > v1, v2;
    for (i = 1; i < n; i += 2) v1.push_back(A[i]);
    for (i = 0; i < n; i += 2) v2.push_back(A[i]);
    j = 0;
    for (auto v : v1) A[j++] = v;
    for (auto v : v2) A[j++] = v;
    for (j = 1; j < m; j += 2) {
      int tmp = A[n - 1][j];
      for (i = n - 1; i > 0; i--) A[i][j] = A[i - 1][j];
      A[0][j] = tmp;
    }
    cout << "YES" << '\n';
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) cout << A[i][j] << " ";
      cout << '\n';
    }
  } else {
    for (i = 0; i < m; i++)
      for (j = 0; j < n; j++) A[i].push_back(j * m + i + 1);
    vector<vector<int> > v1, v2;
    for (i = 1; i < m; i += 2) v1.push_back(A[i]);
    for (i = 0; i < m; i += 2) v2.push_back(A[i]);
    j = 0;
    for (auto v : v1) A[j++] = v;
    for (auto v : v2) A[j++] = v;
    for (j = 1; j < n; j += 2) {
      int tmp = A[m - 1][j];
      for (i = m - 1; i > 0; i--) A[i][j] = A[i - 1][j];
      A[0][j] = tmp;
    }
    cout << "YES" << '\n';
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) cout << A[j][i] << " ";
      cout << '\n';
    }
  }
  return 0;
}
