#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <cstring>
#define pb push_back
using namespace std;
typedef vector<int> vi;
typedef pair<int, int> pii;
const int N = 123;
const int INF = 1000000000;
map<int, vector<pii> > pos;
int dp[N][N];
int manhattan_dist(pii p1, pii p2) {
return abs(p1.first - p2.first) + abs(p1.second - p2.second);
}
int optimize(int n, int k) {
int global_min = INF;
for(auto p: pos[k]) {
dp[p.first][p.second] = 0;
}
for(int i = k - 1; i >= 1 ; i--) {
for(auto p1: pos[i]) {
int min_cost = INF;
for(auto p2: pos[i + 1]) {
int cur_cost = manhattan_dist(p1, p2) + dp[p2.first][p2.second];
if (cur_cost < min_cost) {
min_cost = cur_cost;
}
}
dp[p1.first][p1.second] = min_cost;
if (i == 1) {
global_min = min(global_min, min_cost);
}
}
}
return global_min;
}
void solve() {
memset(dp, INF, sizeof(dp));
pos.clear();
int n, k; cin >> n >> k;
if(k == 1) {
cout << "0\n";
return;
}
int x;
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= n ; j++) {
cin >> x;
if(pos.find(x) == pos.end()) {
pos[x] = vector<pii>();
}
pos[x].pb({i, j});
}
}
int ans;
ans = optimize(n, k);
cout << ans << "\n";
}
int main() {
int t; cin >> t;
while(t--) solve();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8Y3N0cmluZz4KI2RlZmluZSBwYiBwdXNoX2JhY2sKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwoKY29uc3QgaW50IE4gPSAxMjM7CmNvbnN0IGludCBJTkYgPSAxMDAwMDAwMDAwOwoKbWFwPGludCwgdmVjdG9yPHBpaT4gPiBwb3M7CmludCBkcFtOXVtOXTsKCmludCBtYW5oYXR0YW5fZGlzdChwaWkgcDEsIHBpaSBwMikgewoJcmV0dXJuIGFicyhwMS5maXJzdCAtIHAyLmZpcnN0KSArIGFicyhwMS5zZWNvbmQgLSBwMi5zZWNvbmQpOwp9CgppbnQgb3B0aW1pemUoaW50IG4sIGludCBrKSB7CglpbnQgZ2xvYmFsX21pbiA9IElORjsKCWZvcihhdXRvIHA6IHBvc1trXSkgewoJCWRwW3AuZmlyc3RdW3Auc2Vjb25kXSA9IDA7Cgl9CgoJZm9yKGludCBpID0gayAtIDE7IGkgPj0gMSA7IGktLSkgewoJCWZvcihhdXRvIHAxOiBwb3NbaV0pIHsKCQkJaW50IG1pbl9jb3N0ID0gSU5GOwoJCQlmb3IoYXV0byBwMjogcG9zW2kgKyAxXSkgewoJCQkJaW50IGN1cl9jb3N0ID0gbWFuaGF0dGFuX2Rpc3QocDEsIHAyKSArIGRwW3AyLmZpcnN0XVtwMi5zZWNvbmRdOwoJCQkJaWYgKGN1cl9jb3N0IDwgbWluX2Nvc3QpIHsKCQkJCQltaW5fY29zdCA9IGN1cl9jb3N0OwoJCQkJfQoJCQl9CgkJCWRwW3AxLmZpcnN0XVtwMS5zZWNvbmRdID0gbWluX2Nvc3Q7CgkJCWlmIChpID09IDEpIHsKCQkJCWdsb2JhbF9taW4gPSBtaW4oZ2xvYmFsX21pbiwgbWluX2Nvc3QpOwoJCQl9CgkJfQoJfQoJcmV0dXJuIGdsb2JhbF9taW47Cn0KCnZvaWQgc29sdmUoKSB7CgltZW1zZXQoZHAsIElORiwgc2l6ZW9mKGRwKSk7Cglwb3MuY2xlYXIoKTsKCWludCBuLCBrOyBjaW4gPj4gbiA+PiBrOwoJaWYoayA9PSAxKSB7CgkgICAgY291dCA8PCAiMFxuIjsKCSAgICByZXR1cm47Cgl9CglpbnQgeDsKCWZvcihpbnQgaSA9IDEgOyBpIDw9IG4gOyBpKyspIHsKCQlmb3IoaW50IGogPSAxIDsgaiA8PSBuIDsgaisrKSB7CgkJCWNpbiA+PiB4OwoJCQlpZihwb3MuZmluZCh4KSA9PSBwb3MuZW5kKCkpIHsKCQkJCXBvc1t4XSA9IHZlY3RvcjxwaWk+KCk7CgkJCX0KCQkJcG9zW3hdLnBiKHtpLCBqfSk7CgkJfQoJfQoJaW50IGFuczsKCWFucyA9IG9wdGltaXplKG4sIGspOwoJY291dCA8PCBhbnMgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CglpbnQgdDsgY2luID4+IHQ7Cgl3aGlsZSh0LS0pIHNvbHZlKCk7Cn0=