#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, m;
  cin >> n >> m;
  if (n == 1 && m == 1) {
    cout << "YES" << endl;
    cout << 1;
    return 0;
  }
  if (n <= 2 && m <= 2) {
    cout << "NO";
    return 0;
  }
  if (n <= 1 && m <= 3) {
    cout << "NO";
    return 0;
  }
  if (n <= 3 && m <= 1) {
    cout << "NO";
    return 0;
  }
  if (n <= 2 && m <= 3) {
    cout << "NO" << endl;
    return 0;
  }
  if (n <= 3 && m <= 2) {
    cout << "NO" << endl;
    return 0;
  }
  cout << "YES" << endl;
  if (n == 3 && m == 3) {
    cout << "1 3 4" << endl;
    cout << "5 7 6" << endl;
    cout << "9 2 8" << endl;
    return 0;
  }
  if (n == 2 && m == 4) {
    cout << "1 3 5 2" << endl;
    cout << "8 6 4 7" << endl;
    return 0;
  }
  if (n == 1 && m == 4) {
    cout << "3 1 4 2" << endl;
    return 0;
  }
  if (n == 4 && m == 1) {
    cout << 3 << endl;
    cout << 1 << endl;
    cout << 4 << endl;
    cout << 2 << endl;
    return 0;
  }
  if (n == 4 && m == 2) {
    cout << "1 4" << endl;
    cout << "5 8" << endl;
    cout << "2 3" << endl;
    cout << "6 7" << endl;
    return 0;
  }
  if (m == 4) {
    for (int j = 1; j <= n; j++) {
      int t = (j - 1) * m;
      if (j % 2 == 1) {
        cout << t + 3 << ' ' << t + 1 << ' ' << t + 4 << ' ' << t + 2 << endl;
      } else {
        cout << t + 2 << ' ' << t + 4 << ' ' << t + 1 << ' ' << t + 3 << endl;
      }
    }
  }
  if (m > 4) {
    vector<int> kek1;
    vector<int> kek2;
    for (int j = 1; j <= n; j++) {
      if (j % 2 == 1) {
        kek1.clear();
        kek2.clear();
        for (int i = (j - 1) * m + 1; i <= j * m; i += 2) {
          kek1.push_back(i + m);
          cout << i << ' ';
        }
        for (int i = (j - 1) * m + 2; i <= j * m; i += 2) {
          kek2.push_back(i + m);
          cout << i << ' ';
        }
        cout << endl;
      } else {
        if (kek1.size() % 2) {
          int p = kek1.size();
          p /= 2;
          swap(kek1[p], kek1[p * 2]);
        }
        reverse(kek1.begin(), kek1.end());
        if (kek2.size() % 2) {
          int p = kek2.size();
          p /= 2;
          swap(kek2[p], kek2[p * 2]);
        }
        reverse(kek2.begin(), kek2.end());
        for (auto x : kek1) cout << x << ' ';
        for (auto x : kek2) cout << x << ' ';
        cout << endl;
      }
    }
  }
  if (m == 1) {
    if (n == 4) {
      cout << 3 << endl << 1 << endl << 4 << endl << 2;
      return 0;
    }
    for (int i = 1; i <= n; i += 2) {
      cout << i << endl;
    }
    for (int i = 2; i <= n; i += 2) {
      cout << i << endl;
    }
    return 0;
  }
  if (m == 2) {
    vector<int> kek;
    for (int i = 1; i <= n; i += 2) kek.push_back(i * 2 - 1);
    for (int i = 2; i <= n; i += 2) kek.push_back(i * 2 - 1);
    vector<int> kek1;
    vector<int> kek2;
    for (int i = 1; i <= n; i += 2) kek1.push_back(i * 2);
    for (int i = 2; i <= n; i += 2) kek2.push_back(i * 2);
    if (kek1.size() % 2) {
      int p = kek1.size();
      p /= 2;
      swap(kek1[p], kek1[p * 2]);
    }
    reverse(kek1.begin(), kek1.end());
    if (kek2.size() % 2) {
      int p = kek2.size();
      p /= 2;
      swap(kek2[p], kek2[p * 2]);
    }
    reverse(kek2.begin(), kek2.end());
    for (int i = 0; i < kek1.size(); i++) {
      cout << kek[i] << ' ' << kek1[i] << endl;
    }
    for (int i = kek1.size(); i < n; i++) {
      cout << kek[i] << ' ' << kek2[i - kek1.size()] << endl;
    }
  }
  if (m == 3) {
    vector<int> kek;
    for (int i = 1; i <= n; i += 2) kek.push_back(i * 3 - 2);
    for (int i = 2; i <= n; i += 2) kek.push_back(i * 3 - 2);
    vector<int> kek1;
    vector<int> kek2;
    for (int i = 1; i <= n; i += 2) kek1.push_back(i * 3 - 1);
    for (int i = 2; i <= n; i += 2) kek2.push_back(i * 3 - 1);
    if (kek1.size() % 2) {
      int p = kek1.size();
      p /= 2;
      swap(kek1[p], kek1[p * 2]);
    }
    reverse(kek1.begin(), kek1.end());
    if (kek2.size() % 2) {
      int p = kek2.size();
      p /= 2;
      swap(kek2[p], kek2[p * 2]);
    }
    reverse(kek2.begin(), kek2.end());
    for (int i = 0; i < kek1.size(); i++) {
      cout << kek[i] << ' ' << kek1[i] << ' ' << kek[i] + 2 << endl;
    }
    for (int i = kek1.size(); i < n; i++) {
      cout << kek[i] << ' ' << kek2[i - kek1.size()] << ' ' << kek[i] + 2
           << endl;
    }
  }
  return 0;
}
