#include <iostream>
#include <vector>
using namespace std;
using vi = vector<int>;
using vvi = vector<vi>;
vvi flip(const vvi& M) {
if (M.empty()) return M;
int R = M.size(), C = M[0].size();
vvi ret(C, vi(R));
for (int i=0; i<R; i++) {
for (int j=0; j<C; j++) {
ret[j][i] = M[i][j];
}
}
return ret;
}
vvi solve(int R, int C) {
if (R>C && C<=3) return flip(solve(C, R));
if (R==1 && C==1) return {{1}};
if (R<=2 && C<=2) return {};
if (R==1 && C==3) return {};
if (R==2 && C==3) return {{1,5,3}, {4,2,6}};
if (R==3 && C==3) return {{1,8,3}, {4,2,6}, {7,5,9}};
vvi ans(R, vi(C));
int x=1;
for (int c0 : C==3 ? vi{0,1} : vi{1,0}) {
for (int r=0; r<R; r++) {
for (int c=c0; c<C; c+=2) {
ans[r][c] = x++;
}
}
}
return ans;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int t; cin>>t;
for (int R,C; cin>>R>>C;) {
auto ans = solve(R,C);
if (ans.empty()) {
cout << "NO\n";
}
else {
cout << "YES\n";
for (int i=0; i<R; i++) {
for (int j=0; j<C; j++) {
cout << ans[i][j] << "\n "[j+1<C];
}
}
}
}
}