#if defined(LOCAL) #include #else #include #endif #include #pragma GCC optimize("Ofast") //#pragma GCC target("avx2") #pragma GCC optimize("unroll-loops") using namespace std; //#include //#include //namespace mp=boost::multiprecision; //#define mulint mp::cpp_int //#define mulfloat mp::cpp_dec_float_100 struct __INIT{__INIT(){cin.tie(0);ios::sync_with_stdio(false);cout<=0;(i)--) #define flc(x) __builtin_popcountll(x) #define pint pair #define pdouble pair #define plint pair #define fi first #define se second #define all(x) x.begin(),x.end() //#define vec vector #define nep(x) next_permutation(all(x)) typedef long long lint; int dx[8]={1,1,0,-1,-1,-1,0,1}; int dy[8]={0,1,1,1,0,-1,-1,-1}; const int MAX_N=3e5+5; templatebool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b bucket[MAX_N/1000]; //constexpr int MOD=1000000007; constexpr int MOD=998244353; /*#include using namespace atcoder; typedef __int128_t llint;*/ bool check(vector> A){ int H=A.size(),W=A[0].size(); rep(i,H) rep(j,W) A[i][j]--; bool apr[H*W]={}; rep(i,H) rep(j,W){ if(A[i][j]<0 || A[i][j]>=H*W) return false; apr[A[i][j]]=true; } rep(i,H*W) if(!apr[i]) return false; int S=A[0][0]+A[0][1]+A[1][0]+A[1][1]; rep(i,H-1) rep(j,W-1) if(A[i][j]+A[i+1][j]+A[i][j+1]+A[i+1][j+1]!=S) return false; return true; } int main(void){ int H,W; cin >> H >> W; bool swapped=false; if(H%2) swap(H,W),swapped=true; vector> A(H,vector(W)); int lo=1; for(int i=0;i> a(H,vector(W)); rep(i,H) rep(j,W) a[i][j]=A[j][i]; A=a; } if(!check(A)) exit(1); cout << "Yes" << endl; rep(i,H){ rep(j,W) if(i!=H-1 || j!=W-1) cout << A[i][j] << " "; cout << endl; } }