#include <bits/stdc++.h>
using namespace std;
#define sd(x) scanf("%d", &x);
const int N = 20;
int dp[1 << 20];
int CS[1 << N], w2[N][N], w[N][N];
const int INF = 1 << 30;
int main(){
int t; sd(t);
while(t--){
memset(CS, 0, sizeof CS);
memset(dp, 0, sizeof dp);
int n = 20, k = 3;
sd(n); sd(k);
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++){
w2[i][j] =
(rand() % INF) >> 10;
sd(w2[i][j]);
}
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++) w[i][j] = w2[n - 1 - i][n - 1 - j];
int extra = n - k;
for(int i = 0; i < n; i++)
for(int j = 0; j < i; j++){
int rem = ((1 << n) - 1) ^ (1 << i) ^ (1 << j);
int c = w[i][j];
for(int mask = rem; ; mask = (mask - 1) & rem){
CS[mask ^ (1 << i) ^ (1 << j)] += c;
if(!mask) break;
};
}
int terminalMask = (1 << (n - 1));
for(int i = k - 2; i >= 0; i--){
int maskLeft = 1 << (i + extra);
int maskRight = terminalMask;
terminalMask ^= maskLeft;
int stop = i == 0 ? (1 << extra) - 1 : 0;
for(int mask = (1 << extra) - 1; mask >= stop; mask--){
int wt = CS[mask ^ terminalMask];
int T = INF;
for(int submask = mask; ; submask = (submask - 1) & mask){
int wtLeft = CS[maskLeft ^ submask];
int wtRight = CS[maskRight ^ submask ^ mask];
int cut = wt - wtLeft - wtRight;
T = min(T, cut + dp[mask ^ submask]);
if(!submask) break;
}
dp[mask] = T;
}
}
printf("%d\n", dp[(1 << extra) - 1]);
}
}