#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
bool oob(int x, int y, int n, int m) {
if (x <= 0 || y <= 0 || x > n || y > m)
return true;
return false;
}
int t[111][11];
int qq = 0;
bool brut(int x, int y, int n, int m, bitset<101> &bs) {
for (int j = 1; j <= n * m; j++) {
if (bs[j])
continue;
if ((oob(x + 1, y, n, m) || t[x + 1][y] == 0 ||
abs(t[x + 1][y] - j) != 1) &&
(oob(x - 1, y, n, m) || t[x - 1][y] == 0 ||
abs(t[x - 1][y] - j) != 1) &&
(oob(x, y + 1, n, m) || t[x][y + 1] == 0 ||
abs(t[x][y + 1] - j) != 1) &&
(oob(x, y - 1, n, m) || t[x][y - 1] == 0 ||
abs(t[x][y - 1] - j) != 1)) {
bs[j] = 1;
t[x][y] = j;
if (x == n && y == m) {
return true;
}
if (x == n) {
if (brut(1, y + 1, n, m, bs))
return true;
} else {
if (brut(x + 1, y, n, m, bs))
return true;
}
t[x][y] = 0;
bs[j] = 0;
}
}
return false;
}
void solve(int n, int m) {
qq = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
t[i][j] = 0;
bitset<101> bs;
if (!brut(1, 1, n, m, bs)) {
cout << "NO\n";
} else {
cout << "YES\n";
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cout << t[i][j] << " ";
}
cout << "\n";
}
}
}
int main() {
int t;
cin >> t;
while (t--) {
int n, m;
cin >> n >> m;
solve(n, m);
}
}