#include<bits[表情]dc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N=510,mod=998244353;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
typedef pair<int,int> PII;
vector<int> num;
int path[N];
bool dfs(int u,int n1,int n2,int op){
if(n2==u*(u+1)/2&&n1==u){
return true;
}
if(u*(u+1)/2-n2==u-n1){
for(int p=n1+1;p<=u;p++) path[p]=op,op=1-op;
return true;
}
int sheng=u*(u+1)/2-n2;
auto it=upper_bound(num.begin(),num.end(),sheng)-num.begin();
it--;
for(int i=it;i>=1;i--){
int st=1;
if(i==1){
if(u*(u+1)/2-n2==u-n1){
cout<<u<<" "<<n1<<" "<<n2<<endl;
for(int p=n1+1;p<=u;p++) path[p]=op,op=1-op;
return true;
}
// else return false;
}
else {
for(int j=st;j<=1000000000000;j++){
if(i*j+n1>u) break;
if(num[i]*j+n2>(u+1)*u/2) break;
if(dfs(u,n1+j*i,n2+num[i]*j,(op+j)%2)){
int num=0;
for(int p=n1+1;p<=n1+i*j;p++){
path[p]=op;
num++;
if(num%i==0) op=1-op;
}
return true;
}
}
}
}
return false;
}
void slove(){
int n,m;cin>>n>>m;
for(int i=0;i<=1e4;i++) num.push_back(i*(i+1));
vector<vector<int>>g(n+1,vector<int>(m+1,0));
if(m%4==3||m%4==0){
dfs(m,0,0,0);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) g[i][j]=path[j];
}
}
else if(n%4==0|n%4==3){
dfs(n,0,0,0);
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++) g[j][i]=path[j];
}
}
else {
cout<<"No"<<endl;
return ;
}
cout<<"Yes"<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<g[i][j]<<" ";
}
cout<<endl;
}
}
signed main(){
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int T=1;
cin>>T;
while(T--) slove();
}