#include<bits/stdc++.h>
using namespace std;
long long a[110][110] , dp[110][110];
signed main()
{
int n , m , T = 1;
cin >> T;
while(T --){
vector<long long>vec;
long long ans = 1e18;
cin >> n >> m;
for(int i = 0 ; i <= n ; i ++) for(int j = 0 ; j <= m ; j ++) dp[i][j] = 1e18;
for(int i = 1 ; i <= n ; i ++) for(int j = 1 ; j <= m ; j ++) cin >> a[i][j] , a[i][j] -= i + j - 2 , vec.push_back(a[i][j]);
dp[0][0] = dp[0][1] = dp[1][0] = 0;
for(auto k : vec){
if(a[1][1] < k) continue ;
for(int i = 1 ; i <= n ; i ++) for(int j = 1 ; j <= m ; j ++){
if(a[i][j] < k) dp[i][j] = 1e18;
else dp[i][j] = min(dp[i - 1][j] , dp[i][j - 1]) + a[i][j] - k;
}
ans = min(ans , dp[n][m]);
}
cout << ans << '\n';
}
return 0;
}
1384A - Common Prefixes | 371A - K-Periodic Array |
1542A - Odd Set | 1567B - MEXor Mixup |
669A - Little Artem and Presents | 691B - s-palindrome |
851A - Arpa and a research in Mexican wave | 811A - Vladik and Courtesy |
1006B - Polycarp's Practice | 1422A - Fence |
21D - Traveling Graph | 1559B - Mocha and Red and Blue |
1579C - Ticks | 268B - Buttons |
898A - Rounding | 1372B - Omkar and Last Class of Math |
1025D - Recovering BST | 439A - Devu the Singer and Churu the Joker |
1323A - Even Subset Sum Problem | 1095A - Repeating Cipher |
630F - Selection of Personnel | 630K - Indivisibility |
20B - Equation | 600B - Queries about less or equal elements |
1015A - Points in Segments | 1593B - Make it Divisible by 25 |
680C - Bear and Prime 100 | 1300A - Non-zero |
1475E - Advertising Agency | 1345B - Card Constructions |