#include <cstdint>
#include <iostream>
#include <vector>
using namespace std;
// 一行最多6个,那么使用8位数据即可完成一行的比较,速度快很多倍
// 把不可拿取的位置用1标记,然后一次与即可
bool IsEnable(const vector<int8_t>& flags, int y, int x, int m) {
int8_t pFlag = int8_t(1) << (m-1-x);
auto flag = flags[y];
flag >>= 1;
if(y > 0) {
auto uFlag = flags[y-1];
flag |= uFlag | uFlag << 1 | uFlag >> 1;
}
if(y + 1< flags.size()) {
auto dFlag = flags[y+1];
flag |= dFlag | dFlag << 1 | dFlag >> 1;
}
if(flag & pFlag) {
return false;
} else {
return true;
}
}
int GetSum(const vector<int8_t>& flags, int n, int m, const vector<vector<int>>& data) {
int v = 0;
for(auto i = 0; i < n; i++) {
for(auto j = 0; j < m; j++) {
if(flags[i]&(1<<(m-1-j))) {
v += data[i][j];
}
}
}
return v;
}
int vMax = 0;
void Dfs(vector<int8_t>& flags, int n, int m, int i,const vector<vector<int>>& data) {
if(i == n*m) {
auto sum = GetSum(flags, n, m, data);
vMax = max(sum, vMax);
return;
}
auto x = i%m;
auto y = i/m;
if(IsEnable(flags, y, x, m)) {
flags[y] |= 1 << (m-1-x);
Dfs(flags, n, m, i+1, data);
flags[y] &= ~(1<<(m-1-x));
}
Dfs(flags, n, m, i+1, data);
}
int main() {
int t;
cin >> t;
while(t--) {
int n, m;
cin >> n >> m;
vector<vector<int>> data(n, vector<int>(m));
for(auto& vec : data) {
for(auto& v : vec) {
cin >> v;
}
}
vector<int8_t> flags(n);
vMax = 0;
Dfs(flags, n, m, 0, data);
cout << vMax << endl;
}
}
// 64 位输出请用 printf("%lld")