#include <bits/stdc++.h>
using namespace std;
int N, M;
map<pair<int, int>, int> A;
int B[100010];
void shift(char s, int v) {
  if (s == 'r') {
    for (int i = 1; i <= N; i++) {
      if (!(i % 2)) continue;
      for (int j = 1; j <= M; j++) {
        B[j] = A[pair<int, int>(i, j)];
      }
      B[0] = B[M];
      for (int j = 1; j <= M; j++) {
        A[pair<int, int>(i, j)] = B[(j - v + M) % M];
      }
    }
    return;
  }
  for (int j = 1; j <= M; j++) {
    if (!(j % 2)) continue;
    for (int i = 1; i <= N; i++) {
      B[i] = A[pair<int, int>(i, j)];
    }
    B[0] = B[N];
    for (int i = 1; i <= N; i++) {
      A[pair<int, int>(i, j)] = B[(i - v + N) % N];
    }
  }
}
int main() {
  cin >> N >> M;
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= M; j++) A[pair<int, int>(i, j)] = (i - 1) * M + j;
  }
  if (M > 3 && N > 1) {
    shift('r', 2);
    shift('c', 1);
    cout << "YES\n";
    for (int i = 1; i <= N; i++) {
      for (int j = 1; j <= M; j++) {
        cout << A[pair<int, int>(i, j)] << " ";
      }
      cout << "\n";
    }
    return 0;
  }
  if (N > 3 && M > 1) {
    shift('c', 2);
    shift('r', 1);
    cout << "YES\n";
    for (int i = 1; i <= N; i++) {
      for (int j = 1; j <= M; j++) {
        cout << A[pair<int, int>(i, j)] << " ";
      }
      cout << "\n";
    }
    return 0;
  }
  if (max(N, M) == 2) {
    cout << "NO\n";
    return 0;
  }
  if (max(N, M) == 1) {
    cout << "YES\n" << 1 << "\n";
    return 0;
  }
  if (M == 3 && N == 3) {
    A[pair<int, int>(1, 1)] = 6;
    A[pair<int, int>(1, 2)] = 1;
    A[pair<int, int>(1, 3)] = 8;
    A[pair<int, int>(2, 3)] = 3;
    A[pair<int, int>(3, 3)] = 4;
    A[pair<int, int>(3, 2)] = 9;
    A[pair<int, int>(3, 1)] = 2;
    A[pair<int, int>(2, 1)] = 7;
    cout << "YES\n";
    for (int i = 1; i <= N; i++) {
      for (int j = 1; j <= M; j++) {
        cout << A[pair<int, int>(i, j)] << " ";
      }
      cout << "\n";
    }
    return 0;
  }
  if (max(N, M) == 3) {
    cout << "NO\n";
    return 0;
  }
  cout << "YES\n";
  if (N == 1) {
    for (int k = 1; k < (M / 4); k++) {
      A[pair<int, int>(1, 4 * k - 3)] = 4 * k - 2;
      A[pair<int, int>(1, 4 * k - 2)] = 4 * k;
      A[pair<int, int>(1, 4 * k - 1)] = 4 * k - 3;
      A[pair<int, int>(1, 4 * k)] = 4 * k - 1;
    }
    int k = M / 4;
    if ((M % 4) == 0 || (M % 4) == 1) {
      A[pair<int, int>(1, 4 * k - 3)] = 4 * k - 2;
      A[pair<int, int>(1, 4 * k - 2)] = 4 * k;
      A[pair<int, int>(1, 4 * k - 1)] = 4 * k - 3;
      A[pair<int, int>(1, 4 * k)] = 4 * k - 1;
    } else {
      A[pair<int, int>(1, 4 * k - 3)] = 4 * k - 1;
      A[pair<int, int>(1, 4 * k - 2)] = 4 * k + 1;
      A[pair<int, int>(1, 4 * k - 1)] = 4 * k - 3;
      A[pair<int, int>(1, 4 * k)] = 4 * k + 2;
      A[pair<int, int>(1, 4 * k + 1)] = 4 * k - 2;
      A[pair<int, int>(1, 4 * k + 2)] = 4 * k;
    }
  }
  if (M == 1) {
    for (int k = 1; k < (N / 4); k++) {
      A[pair<int, int>(4 * k - 3, 1)] = 4 * k - 2;
      A[pair<int, int>(4 * k - 2, 1)] = 4 * k;
      A[pair<int, int>(4 * k - 1, 1)] = 4 * k - 3;
      A[pair<int, int>(4 * k, 1)] = 4 * k - 1;
    }
    int k = N / 4;
    if ((N % 4) == 0 || (N % 4) == 1) {
      A[pair<int, int>(4 * k - 3, 1)] = 4 * k - 2;
      A[pair<int, int>(4 * k - 2, 1)] = 4 * k;
      A[pair<int, int>(4 * k - 1, 1)] = 4 * k - 3;
      A[pair<int, int>(4 * k, 1)] = 4 * k - 1;
    } else {
      A[pair<int, int>(4 * k - 3, 1)] = 4 * k - 1;
      A[pair<int, int>(4 * k - 2, 1)] = 4 * k + 1;
      A[pair<int, int>(4 * k - 1, 1)] = 4 * k - 3;
      A[pair<int, int>(4 * k, 1)] = 4 * k + 2;
      A[pair<int, int>(4 * k + 1, 1)] = 4 * k - 2;
      A[pair<int, int>(4 * k + 2, 1)] = 4 * k;
    }
  }
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= M; j++) {
      cout << A[pair<int, int>(i, j)] << " ";
    }
    cout << "\n";
  }
}
