//31MS 312K 873 B C++
//二维DP,状态转移小变化
#include<stdio.h>
#include<string.h>
int dp[25][1005];
inline int max(int a,int b)
{
return a>b?a:b;
}
int main(void)
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&dp[i][j]);
for(int i=1;i<=n;i++){
int temp;
for(int j=1;j<=m;j++){
if(i==1 && j==1) continue;
if(i==1) temp=dp[i][j-1];
else if(j==1) temp=dp[i-1][j];
else temp=max(dp[i][j-1],dp[i-1][j]);
for(int k=1;k<=j/2;k++)
if(j%k==0)
temp=max(temp,dp[i][k]);
dp[i][j]+=temp;
}
}
printf("%d\n",dp[n][m]);
}
return 0;
}