



#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e3 + 7;
inline ll read() {
ll s = 0, w = 1;
char ch = getchar();
while (ch < 48 || ch > 57) {
if (ch == '-') w = -1;
ch = getchar();
}
while (ch >= 48 && ch <= 57)
s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
return s * w;
}
#define lowbit(x) (x&-x)
ll tree[maxn][maxn],tree2[maxn][maxn],tree3[maxn][maxn],tree4[maxn][maxn];
int n,m;
void add(int x,int y,ll val) {
for(int i=x; i<=n; i+=lowbit(i))
for(int j=y; j<=m; j+=lowbit(j)) {
tree[i][j]+=val;
tree2[i][j]+=x*val;
tree3[i][j]+=y*val;
tree4[i][j]+=x*y*val;
}
}//对二维差分数组单点修改,logn*logm
void real_add(int x1,int y1,int x2,int y2,ll val) {
add(x1,y1,val);
add(x1,y2+1,-val);
add(x2+1,y1,-val);
add(x2+1,y2+1,val);
}//对原数组区间修改
ll ask(int x,int y) {
ll res=0,res2=0,res3=0,res4=0;
for(int i=x; i; i-=lowbit(i))
for(int j=y; j; j-=lowbit(j)) {
res+=tree[i][j];
res2+=tree2[i][j];
res3+=tree3[i][j];
res4+=tree4[i][j];
}
return (x+1)*(y+1)*res-(y+1)*res2-(x+1)*res3+res4;
}//求原数组的前缀和,logn*logm
ll real_ask(int x1,int y1,int x2,int y2) {
return ask(x2,y2)-ask(x2,y1-1)-ask(x1-1,y2)+ask(x1-1,y1-1);
}//区间求和
ll sum(int x,int y) {
ll res=0;
for(int i=x; i; i-=lowbit(i))
for(int j=y; j; j-=lowbit(j))
res+=tree[i][j];
return res;
}//求gad[x][y]
int a,b,gad[maxn][maxn];
int main() {
int t=read();
while(t--) {
memset(tree,0,sizeof tree);
memset(tree2,0,sizeof tree2);
memset(tree3,0,sizeof tree3);
memset(tree4,0,sizeof tree4);
n = read(), m = read();
for(int i=1,val; i<=n; ++i)
for(int j=1; j<=m; ++j) {
gad[i][j]=read();
real_add(i,j,i,j,gad[i][j]);
//add(i,j,gad[i][j]-gad[i][j-1]-gad[i-1][j]+gad[i-1][j-1]);//这样写也行
}
cout<<sum(n,m)<<endl;
//cout<<real_ask(2,3,2,3)<<endl;
}
return 0;
} 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 7;
inline ll read() {
ll s = 0, w = 1;
char ch = getchar();
while (ch < 48 || ch > 57) {
if (ch == '-') w = -1;
ch = getchar();
}
while (ch >= 48 && ch <= 57)
s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
return s * w;
}
ll sum[1025 << 2][1025 << 2], n, m,lazy[1025<<2][1025<<2];
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
void Subbuild(int l, int r, int rt, int t) {
lazy[t][rt]=0;
if (l == r) {
int val = read();
sum[t][rt] = val;
return;
}
int mid = (l + r) >> 1;
Subbuild(lson, t);
Subbuild(rson, t);
sum[t][rt] = sum[t][rt << 1] + sum[t][rt << 1 | 1];
}
void updown(int l,int r,int rt,int t) {
if(l==r) {
sum[t][rt]=sum[t<<1][rt]+sum[t<<1|1][rt];
return;
}
int mid=l+r>>1;
if(1<=mid) updown(lson,t);
if(m>mid) updown(rson,t);
sum[t][rt]=sum[t][rt<<1]+sum[t][rt<<1|1];
}
void build(int l, int r, int rt) {
if (l == r) {
Subbuild(1, m, 1, rt);
return;
}
int mid = (l + r) >> 1;
build(lson);
build(rson);
updown(1,m,1,rt);
}
void push_down(int &t,int &rt,int m) {
if(lazy[t][rt]) {
lazy[t][rt<<1]+=lazy[t][rt];
lazy[t][rt<<1|1]+=lazy[t][rt];
sum[t][rt<<1]+=(m-(m>>1))*lazy[t][rt];
sum[t][rt<<1|1]+=(m>>1)*lazy[t][rt];
lazy[t][rt]=0;
}
}
void subupdate(int a,int b,ll val,int l,int r,int rt,int t) {
if(a<=l&&b>=r) {
sum[t][rt]+=(r-l+1)*val;
lazy[t][rt]+=val;
return;
}
push_down(t,rt,r-l+1);
int mid=l+r>>1;
if(a<=mid) subupdate(a,b,val,lson,t);
if(b>mid) subupdate(a,b,val,rson,t);
sum[t][rt]=sum[t][rt<<1]+sum[t][rt<<1|1];
}
void update(int x1,int x2,int y1,int y2,ll val,int l,int r,int rt) {
subupdate(y1,y2,val,1,m,1,rt);
if(l!=r) {
int mid=l+r>>1;
if(x1<=mid) update(x1,x2,y1,y2,val,lson);
if(x2>mid) update(x1,x2,y1,y2,val,rson);
}
}
ll subquery(int a,int b,int l,int r,int rt,int t) {
if(a<=l&&b>=r) return sum[t][rt];
push_down(t,rt,r-l+1);
int mid=l+r>>1;
ll ans=0;
if(a<=mid) ans+=subquery(a,b,lson,t);
if(b>mid) ans+=subquery(a,b,rson,t);
return ans;
}
ll query(int x,int xx,int y,int yy,int l,int r,int rt) {
if(x<=l&&xx>=r) return subquery(y,yy,1,m,1,rt);
int mid=l+r>>1;
ll ans=0;
if(x<=mid) ans+=query(x,xx,y,yy,lson);
if(xx>mid) ans+=query(x,xx,y,yy,rson);
return ans;
}
int main() {
int t=read();
while(t--) {
n = read(), m = read();
memset(lazy,0,sizeof lazy);
build(1, n, 1);
cout<<query(1,n,1,m,1,n,1)<<endl;
}
return 0;
}