#include <bits/stdc++.h>
using namespace std;
const int N = 1e3, OO = 0x3f3f3f3f;
int grid[N][N], mem[N][N];
int tc, x, y;
bool valid(int i, int j)
{
return i < y && j < x;
}
int solve(int i, int j)
{
if(i == y && j == x)
return 0;
if(mem[i][j] != -1) return mem[i][j];
int opt1 = solve(i + 1, j) + grid[i][j];
int opt2 = solve(i, j + 1) + grid[i][j];
return mem[i][j] = min(opt1, opt2);
}
int main()
{
scanf("%d", &tc);
while(tc--)
{
memset(mem, -1, sizeof mem);
scanf("%d %d", &y, &x);
for(int i = 0 ; i < y; ++i)
for(int j = 0; j < x; ++j)
scanf("%d", &grid[i][j]);
printf("%d\n", solve(0, 0));
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTiA9IDFlMywgT08gPSAweDNmM2YzZjNmOwoKaW50IGdyaWRbTl1bTl0sIG1lbVtOXVtOXTsKaW50IHRjLCB4LCB5Owpib29sIHZhbGlkKGludCBpLCBpbnQgaikKewoJcmV0dXJuIGkgPCB5ICYmIGogPCB4Owp9CmludCBzb2x2ZShpbnQgaSwgaW50IGopCnsKCWlmKGkgPT0geSAmJiBqID09IHgpCgkJcmV0dXJuIDA7CglpZihtZW1baV1bal0gIT0gLTEpCXJldHVybiBtZW1baV1bal07CglpbnQgb3B0MSA9IHNvbHZlKGkgKyAxLCBqKSArIGdyaWRbaV1bal07CglpbnQgb3B0MiA9IHNvbHZlKGksIGogKyAxKSArIGdyaWRbaV1bal07CgkKCXJldHVybiBtZW1baV1bal0gPSBtaW4ob3B0MSwgb3B0Mik7Cn0KaW50IG1haW4oKQp7CglzY2FuZigiJWQiLCAmdGMpOwoJd2hpbGUodGMtLSkKCXsKCQltZW1zZXQobWVtLCAtMSwgc2l6ZW9mIG1lbSk7CgkJc2NhbmYoIiVkICVkIiwgJnksICZ4KTsKCQlmb3IoaW50IGkgPSAwIDsgaSA8IHk7ICsraSkKCQkJZm9yKGludCBqID0gMDsgaiA8IHg7ICsraikKCQkJCXNjYW5mKCIlZCIsICZncmlkW2ldW2pdKTsKCQlwcmludGYoIiVkXG4iLCBzb2x2ZSgwLCAwKSk7Cgl9CglyZXR1cm4gMDsKfQ==