#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e9 + 10, MAX = 2e5 + 1e4, MOD = 1e9 + 7, MAXL = 25;
void OUT(long double o, int x) {
  cout << fixed << setprecision(x) << o;
  return;
}
long long a[MAX];
deque<int> q[MAX];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, m;
  cin >> n >> m;
  if (n == 1 && m == 1) return cout << "YES\n1", 0;
  if ((n < 4 && m < 4) && (n * m) < 9) return cout << "NO\n", 0;
  if (n == 3 && m == 3) {
    cout << "YES\n3 8 4\n";
    cout << "7 1 6\n";
    cout << "5 9 2\n";
    return 0;
  }
  if (m >= 4) {
    cout << "YES\n";
    if (m % 2 == 0) {
      for (int i = 1; i <= n; i++) {
        deque<int> p;
        if (i % 2 == 1) {
          p.push_back(2);
          p.push_back(4);
          p.push_back(1);
          p.push_back(3);
          for (int j = 5; j <= m; j++) {
            if (j % 2 == 1)
              p.push_front(j);
            else
              p.push_back(j);
          }
        } else {
          p.push_back(3);
          p.push_back(1);
          p.push_back(4);
          p.push_back(2);
          for (int j = 5; j <= m; j++) {
            if (j % 2 == 0)
              p.push_front(j);
            else
              p.push_back(j);
          }
        }
        for (int j : p) cout << j + (i - 1) * m << " ";
        cout << "\n";
      }
    } else {
      for (int i = 1; i <= n; i++) {
        deque<int> p;
        if (i % 2 == 1) {
          p.push_back(5);
          p.push_back(2);
          p.push_back(4);
          p.push_back(1);
          p.push_back(3);
          for (int j = 6; j <= m; j++) {
            if (j % 2 == 1)
              p.push_front(j);
            else
              p.push_back(j);
          }
        } else {
          p.push_back(2);
          p.push_back(4);
          p.push_back(1);
          p.push_back(3);
          p.push_back(5);
          for (int j = 6; j <= m; j++) {
            if (j % 2 == 0)
              p.push_front(j);
            else
              p.push_back(j);
          }
        }
        for (int j : p) cout << j + (i - 1) * m << " ";
        cout << "\n";
      }
    }
  } else {
    cout << "YES\n";
    if (n % 2 == 0) {
      for (int i = 1; i <= m; i++) {
        if (i % 2 == 1) {
          q[i].push_back(2);
          q[i].push_back(4);
          q[i].push_back(1);
          q[i].push_back(3);
          for (int j = 5; j <= n; j++) {
            if (j % 2 == 1)
              q[i].push_front(j);
            else
              q[i].push_back(j);
          }
        } else {
          q[i].push_back(3);
          q[i].push_back(1);
          q[i].push_back(4);
          q[i].push_back(2);
          for (int j = 5; j <= n; j++) {
            if (j % 2 == 0)
              q[i].push_front(j);
            else
              q[i].push_back(j);
          }
        }
      }
    } else {
      for (int i = 1; i <= m; i++) {
        if (i % 2 == 1) {
          q[i].push_back(5);
          q[i].push_back(2);
          q[i].push_back(4);
          q[i].push_back(1);
          q[i].push_back(3);
          for (int j = 6; j <= n; j++) {
            if (j % 2 == 1)
              q[i].push_front(j);
            else
              q[i].push_back(j);
          }
        } else {
          q[i].push_back(2);
          q[i].push_back(4);
          q[i].push_back(1);
          q[i].push_back(3);
          q[i].push_back(5);
          for (int j = 6; j <= n; j++) {
            if (j % 2 == 0)
              q[i].push_front(j);
            else
              q[i].push_back(j);
          }
        }
      }
    }
    for (int i = 0; i < n; i++) {
      for (int j = 1; j <= m; j++) cout << ((q[j][i] - 1) * m) + j << " ";
      cout << "\n";
    }
  }
  return 0;
}
