#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;
int data[25][1005];
int max(int a,int b){
return a>b?a:b;
}
int main(){
int zushu;
int n,m;
scanf("%d",&zushu);
while(zushu--){
scanf("%d%d",&n,&m);
memset(data,0,sizeof(data));
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j)
scanf("%d",&data[i][j]);
}
int xx=0;//和
for(int i=2;i<=m;++i){
xx=data[1][i-1];
for(int j=1;j<i;++j){
if(i%j==0){
xx=max(xx,data[1][j]);//初始化第一行
}
}
data[1][i]+=xx;
}
for(int i=2;i<=n;++i){
data[i][1]+=data[i-1][1];//初始化第一列
for(int j=2;j<=m;j++){
xx=max(data[i-1][j],data[i][j-1]);//比较上和左
for(int k=1;k<j&&(j%k==0);++k)
xx=max(xx,data[i][k]);//比较因子和最大值
data[i][j]+=xx;
}
}
printf("%d\n",data[n][m]);
}
return 0;
}