#include <bits/stdc++.h>   #pragma comment(linker,  /STACK:102400000,102400000 )   using namespace std;   const int maxn = 1e5 + 5;   vector<int> a[maxn];   vector<int> ans[maxn];   int n, m, cas = 0;   void change2(int t) {     ans[t].resize(m + 1);     ans[t + 1].resize(m + 1);     for (int i = 1; i <= m; ++i) {       if (i & 1)         ans[t][i] = a[t][i];       else         ans[t + 1][i] = a[t][i];     }     ans[t][2] = a[t + 1][m];     ans[t + 1][1] = a[t + 1][m - 1];     for (int i = 3; i <= m; ++i) {       if (i & 1)         ans[t + 1][i] = a[t + 1][i - 2];       else         ans[t][i] = a[t + 1][i - 2];     }   }   void change3(int t) {     ans[t].resize(m + 1);     ans[t + 1].resize(m + 1);     ans[t + 2].resize(m + 1);     for (int i = 1; i <= m; ++i) {       if (i & 1)         ans[t][i] = a[t][i];       else         ans[t + 2][i] = a[t][i];     }     ans[t][2] = a[t + 1][m];     ans[t + 1][1] = a[t + 1][m - 1];     for (int i = 3; i <= m; ++i) {       if (i & 1)         ans[t + 1][i] = a[t + 1][i - 2];       else         ans[t][i] = a[t + 1][i - 2];     }     for (int i = 1; i <= m; ++i) {       if (i & 1)         ans[t + 2][i] = a[t + 2][i];       else         ans[t + 1][i] = a[t + 2][i];     }   }   void change1(int t) {     ans[t].push_back(123);     for (int i = 1; i <= m; ++i) {       if ((i & 1) == cas) ans[t].push_back(a[t][i]);     }     for (int i = 1; i <= m; ++i) {       if ((i & 1) == (cas ^ 1)) ans[t].push_back(a[t][i]);     }   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     int i, j, k;     cin >> n >> m;     if (n == 3 && m == 3) {       cout <<  YES  << endl;       cout <<  1 8 3  << endl;       cout <<  9 2 4  << endl;       cout <<  5 7 6  << endl;       return 0;     }     if (n == 1 && m == 1) {       cout <<  YES  << endl;       cout <<  1  << endl;       return 0;     }     if (n <= 2 && m <= 2) {       cout <<  NO  << endl;       return 0;     }     if ((n == 1 && m <= 3) || (m == 1 && n == 3) ||         (n + m == 5 && n != 1 && m != 1)) {       cout <<  NO  << endl;       return 0;     }     if (n <= m) {       for (int i = 1; i <= n; ++i) {         a[i].push_back(123);         for (int j = 1; j <= m; ++j) a[i].push_back((i - 1) * m + j);       }       if (n != 1) {         if (n % 2 == 0) {           for (int i = 1; i <= n; i += 2) change2(i);         } else {           for (int i = 1; i <= n - 3; i += 2) change2(i);           change3(n - 2);         }       } else         change1(1);       cout <<  YES  << endl;       for (int i = 1; i <= n; ++i) {         for (int j = 1; j <= m; ++j) cout << ans[i][j] <<    ;         cout << endl;       }     } else {       int cnt = 1;       swap(m, n);       for (int i = 1; i <= n; ++i) a[i].push_back(23);       for (int i = 1; i <= m; ++i)         for (int j = 1; j <= n; ++j) a[j].push_back(cnt++);       if (n != 1) {         if (n % 2 == 0) {           for (int i = 1; i <= n; i += 2) change2(i);         } else {           for (int i = 1; i <= n - 3; i += 2) change2(i);           change3(n - 2);         }       } else         change1(1);       cout <<  YES  << endl;       for (int i = 1; i <= m; ++i) {         for (int j = 1; j <= n; ++j) cout << ans[j][i] <<    ;         cout << endl;       }     }     return 0;   }