#pragma GCC optimize("O3") #include using namespace std; using ll = long long; using P = pair; template using V = vector; #define fi first #define se second #define all(v) (v).begin(), (v).end() const ll inf = (1e18); // const ll mod=998244353; const ll mod = 1000000007; const vector dy = {-1, 0, 1, 0}, dx = {0, -1, 0, 1}; ll GCD(ll a, ll b) { return b ? GCD(b, a % b) : a; } ll LCM(ll c, ll d) { return c / GCD(c, d) * d; } struct __INIT { __INIT() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(20); } } __init; template bool chmax(T &a, const T &b) { if (a < b) { a = b; return 1; } return 0; } template bool chmin(T &a, const T &b) { if (a > b) { a = b; return 1; } return 0; } template void debag(const vector &a) { cerr << "debag :"; for (auto v : a) cerr << v << " "; cerr << "\n"; } template void print(const vector &a) { for (auto v : a) cout << v << " "; cout << "\n"; } vector prime; void make(int num) { prime.resize(num, true); prime[0] = false; for (int i = 0; i * i < num; i++) { if (prime[i]) { for (int j = 2; (i + 1) * j <= num; j++) { prime[(i + 1) * j - 1] = false; } } } } int main() { int h, n; cin >> h >> n; V d; for (int i = 1; i <= h * n; i++) { d.emplace_back(i); } int id1 = 0, id2 = h * n - 1; cout << "Yes" << "\n"; for (int i = 0; i < h; i++) { if (i % 2 == 0) { int sz1 = (n + 1) / 2; int sz2 = n / 2; V aa, bb; for (int j = 0; j < sz1; j++) { aa.emplace_back(d[id1++]); } for (int j = 0; j < sz2; j++) { bb.emplace_back(d[id2--]); } for (int j = 0; j < n; j++) { if (j % 2 == 0) { cout << aa[j / 2]; } else { cout << bb[j / 2]; } if (j == n - 1) cout << "\n"; else cout << " "; } } else { int sz1 = n / 2; int sz2 = (n + 1) / 2; V aa, bb; for (int j = 0; j < sz1; j++) { aa.emplace_back(d[id1++]); } for (int j = 0; j < sz2; j++) { bb.emplace_back(d[id2--]); } // reverse(all(aa)); // reverse(all(bb)); for (int j = 0; j < n; j++) { if (j % 2 == 0) { cout << bb[j / 2]; } else { cout << aa[j / 2]; } if (j == n - 1) cout << "\n"; else cout << " "; } } } }