int optimal() { paths.clear(); visited.clear(); paths.insert(paths.begin(),h,vi(w,0)); visited.insert(visited.begin(),h,vb(w,false)); for(int i=0;i<w;++i) populate(0,i); int m=paths[0][0]; for(int i=1;i<w;++i) if(paths[0][i]>m) m=paths[0][i]; return m; }
int main() { int t; scanf("%d",&t); for(int i=0;i<t;++i) { scanf("%d %d",&h,&w); stones.clear(); stones.insert(stones.begin(),h,vi(w,0)); for(int i=0;i<h;++i) for(int j=0;j<w;++j) scanf("%d",&stones[i][j]); cout<< optimal() <<endl; } return 0; }