#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<queue> #include<stack> #include<set> #include<vector> #include<map> #include<cmath> const int maxn=1e5+5; typedef long long ll; using namespace std; vector<int>vec[maxn]; int vis[maxn]; int main() { int T; cin>>T; ll n,k; while(T--) { scanf("%lld%lld",&n,&k); ll sum=(n*(n+1)/2); for(int t=1; t<=k; t++) { vec[t].clear(); } memset(vis,0,sizeof(vis)); if(sum%k!=0) { puts("no"); } else { if((n/k)%2==0) { puts("yes"); int cnt=1; for(int j=1; j<=n/k; j++) { if(j%2==1) { for(int t=1; t<=k; t++) { vec[t].push_back(cnt++); } } else { for(int t=k; t>=1; t--) { vec[t].push_back(cnt++); } } } for(int t=1; t<=k; t++) { for(int j=0; j<vec[t].size(); j++) { if(j!=vec[t].size()-1) printf("%d ",vec[t][j]); else { printf("%d",vec[t][j]); } } printf("\n"); } } else { puts("yes"); if(n==1) { puts("1"); continue; } ll kk=(3*k+3)/2; ll ss=k/2+1; int cnt=1; vec[1].push_back(cnt); vec[1].push_back(kk-cnt); int cnt1=cnt; int cnt2=kk-cnt; for(int t=2;t<=k;t++) { if(t%2==0) { int temp1=cnt1+ss,temp2=cnt2-abs(k-ss); vec[t].push_back(temp1); vec[t].push_back(temp2); cnt1=temp1; cnt2=temp2; } else { int temp1=cnt1-abs(k-ss),temp2=cnt2+ss; vec[t].push_back(temp1); vec[t].push_back(temp2); cnt1=temp1; cnt2=temp2; } } cnt=2*k+1; for(int j=1; j<=n/k-2; j++) { if(j%2==0) { for(int t=1; t<=k; t++) { vec[t].push_back(cnt++); } } else { for(int t=k; t>=1; t--) { vec[t].push_back(cnt++); } } } for(int t=1; t<=k; t++) { for(int j=0; j<vec[t].size(); j++) { if(j!=vec[t].size()-1) printf("%d ",vec[t][j]); else { printf("%d",vec[t][j]); } } printf("\n"); } } } } return 0; }