#include<iostream>
using namespace std;
int n,m,arr[100][100];
int cal_Yeven[]={-1,-1,-1,1,1,0};
int cal_Yodd[]={0,-1,0,1,1,0};
int cal_IYeven[]={0,-1,0,1,-1,0};
int cal_IYodd[]={1,-1,1,1,-1,0};
bool safe(int x,int y)
{
if(x<0 || y<0 || x>=n || y>=m) return false;
return true;
}
int cal_Y(int x,int y)
{
int a,b,i;
int val=arr[x][y];
for(i=0;i<6;i=i+2)
{
if(y%2==0)
{
a=x+cal_Yeven[i];
b=y+cal_Yeven[i+1];
if(safe(a,b)) val+=(arr[a][b]);
}
else
{
a=x+cal_Yodd[i];
b=y+cal_Yodd[i+1];
if(safe(a,b)) val+=(arr[a][b]);
}
}
return val;
}
int cal_IY(int x,int y)
{
int a,b,i;
int val=arr[x][y];
for(i=0;i<6;i=i+2)
{
if(y%2==0)
{
a=x+cal_IYeven[i];
b=y+cal_IYeven[i+1];
if(safe(a,b)) val+=(arr[a][b]);
}
else
{
a=x+cal_IYodd[i];
b=y+cal_IYodd[i+1];
if(safe(a,b)) val+=(arr[a][b]);
}
}
return val;
}
int visited[1000][1000];
int calE[]={-1,-1,-1,0,-1,1,0,-1,0,1,-1,0};
int calO[]={-1,0,0,-1,0,1,1,-1,1,0,1,-1};
void dfs(int x,int y,int val,int &max,int number)
{
int i;
if(number==4)
{
if(max<val) max=val;
return;
}
visited[x][y]=1;
if(y%2==0)
{
for(i=0;i<12;i=i+2)
{
int a=x+calE[i];
int b=y+calE[i+1];
if(safe(a,b) && !visited[a][b])
{
dfs(a,b,val+arr[a][b],max,number+1);
}
}
}
else
{
for(i=0;i<12;i=i+2)
{
int a=x+calO[i];
int b=y+calO[i+1];
if(safe(a,b) && !visited[a][b])
{
dfs(a,b,val+arr[a][b],max,number+1);
}
}
}
visited[x][y]=0;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n>>m;
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cin>>arr[i][j];
}
}
int ans=-100;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
int val1=0;
dfs(i,j,arr[i][j],val1,1);
int val2=cal_Y(i,j);
int val3=cal_IY(i,j);
int val=max(val2,max(val1,val3));
// cout<<val1<<" "<<val2<<" "<<val3<<endl;
if(ans<val)
{
ans=val;
// cout<<"asa"<<val1<<" "<<val2<<" "<<val3<<endl;
}
}
}
cout<<ans<<endl;
}
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBuLG0sYXJyWzEwMF1bMTAwXTsKCmludCBjYWxfWWV2ZW5bXT17LTEsLTEsLTEsMSwxLDB9OwppbnQgY2FsX1lvZGRbXT17MCwtMSwwLDEsMSwwfTsKaW50IGNhbF9JWWV2ZW5bXT17MCwtMSwwLDEsLTEsMH07CmludCBjYWxfSVlvZGRbXT17MSwtMSwxLDEsLTEsMH07CmJvb2wgc2FmZShpbnQgeCxpbnQgeSkKewoJaWYoeDwwIHx8IHk8MCB8fCB4Pj1uIHx8IHk+PW0pIHJldHVybiBmYWxzZTsKCXJldHVybiB0cnVlOwp9CmludCBjYWxfWShpbnQgeCxpbnQgeSkKewoJaW50IGEsYixpOwoJaW50IHZhbD1hcnJbeF1beV07Cglmb3IoaT0wO2k8NjtpPWkrMikKCXsKCQlpZih5JTI9PTApCgkJewoJCQlhPXgrY2FsX1lldmVuW2ldOwoJCQliPXkrY2FsX1lldmVuW2krMV07CQoJCQlpZihzYWZlKGEsYikpIHZhbCs9KGFyclthXVtiXSk7CgkJfQoJCWVsc2UKCQl7CgkJCWE9eCtjYWxfWW9kZFtpXTsKCQkJYj15K2NhbF9Zb2RkW2krMV07CQoJCQlpZihzYWZlKGEsYikpIHZhbCs9KGFyclthXVtiXSk7CgkJfQoJfQoJcmV0dXJuIHZhbDsKfQoKaW50IGNhbF9JWShpbnQgeCxpbnQgeSkKewoJaW50IGEsYixpOwoJaW50IHZhbD1hcnJbeF1beV07Cglmb3IoaT0wO2k8NjtpPWkrMikKCXsKCQlpZih5JTI9PTApCgkJewoJCQlhPXgrY2FsX0lZZXZlbltpXTsKCQkJYj15K2NhbF9JWWV2ZW5baSsxXTsJCgkJCWlmKHNhZmUoYSxiKSkgdmFsKz0oYXJyW2FdW2JdKTsKCQl9CgkJZWxzZQoJCXsKCQkJYT14K2NhbF9JWW9kZFtpXTsKCQkJYj15K2NhbF9JWW9kZFtpKzFdOwkKCQkJaWYoc2FmZShhLGIpKSB2YWwrPShhcnJbYV1bYl0pOwoJCX0KCX0KCXJldHVybiB2YWw7Cn0KCmludCB2aXNpdGVkWzEwMDBdWzEwMDBdOwppbnQgY2FsRVtdPXstMSwtMSwtMSwwLC0xLDEsMCwtMSwwLDEsLTEsMH07CmludCBjYWxPW109ey0xLDAsMCwtMSwwLDEsMSwtMSwxLDAsMSwtMX07Cgp2b2lkIGRmcyhpbnQgeCxpbnQgeSxpbnQgdmFsLGludCAmbWF4LGludCBudW1iZXIpCnsKCWludCBpOwoJaWYobnVtYmVyPT00KSAKCXsKCQlpZihtYXg8dmFsKSBtYXg9dmFsOwoJCXJldHVybjsKCX0KCXZpc2l0ZWRbeF1beV09MTsKCWlmKHklMj09MCkKCXsKCQlmb3IoaT0wO2k8MTI7aT1pKzIpCgkJewoJCQlpbnQgYT14K2NhbEVbaV07CgkJCWludCBiPXkrY2FsRVtpKzFdOwoJCQlpZihzYWZlKGEsYikgJiYgIXZpc2l0ZWRbYV1bYl0pIAoJCQl7CgkJCQlkZnMoYSxiLHZhbCthcnJbYV1bYl0sbWF4LG51bWJlcisxKTsKCQkJfQoJCX0JCgl9IAoJZWxzZQoJewoJCWZvcihpPTA7aTwxMjtpPWkrMikKCQl7CgkJCWludCBhPXgrY2FsT1tpXTsKCQkJaW50IGI9eStjYWxPW2krMV07CgkJCWlmKHNhZmUoYSxiKSAmJiAhdmlzaXRlZFthXVtiXSkgCgkJCXsKCQkJCWRmcyhhLGIsdmFsK2FyclthXVtiXSxtYXgsbnVtYmVyKzEpOwoJCQl9CgkJfQkKCX0gCgl2aXNpdGVkW3hdW3ldPTA7Cn0KCmludCBtYWluKCkKewoJaW50IHQ7CgljaW4+PnQ7Cgl3aGlsZSh0LS0pCgl7CgljaW4+Pm4+Pm07CglpbnQgaSxqOwoJZm9yKGk9MDtpPG47aSsrKQoJewoJCWZvcihqPTA7ajxtO2orKykKCQl7CgkJCWNpbj4+YXJyW2ldW2pdOwoJCX0KCX0KCWludCBhbnM9LTEwMDsKCWZvcihpPTA7aTxuO2krKykKCXsKCQlmb3Ioaj0wO2o8bTtqKyspCgkJewoJCQlpbnQgdmFsMT0wOwoJCQlkZnMoaSxqLGFycltpXVtqXSx2YWwxLDEpOwoJCQlpbnQgdmFsMj1jYWxfWShpLGopOwoJCQlpbnQgdmFsMz1jYWxfSVkoaSxqKTsKCQkJaW50IHZhbD1tYXgodmFsMixtYXgodmFsMSx2YWwzKSk7CgkJLy8JY291dDw8dmFsMTw8IiAiPDx2YWwyPDwiICI8PHZhbDM8PGVuZGw7CgkJCWlmKGFuczx2YWwpIAoJCQl7CgkJCQlhbnM9dmFsOwoJCQkvLwljb3V0PDwiYXNhIjw8dmFsMTw8IiAiPDx2YWwyPDwiICI8PHZhbDM8PGVuZGw7CgkJCX0KCQl9Cgl9Cgljb3V0PDxhbnM8PGVuZGw7Cgl9Cn0=