//#pragma GCC optimize "trapv"
#include<bits/stdc++.h>
using namespace std;
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
//using namespace __gnu_pbds;
//find_by_order(k) returns iterator to kth element starting from 0;
//order_of_key(k) returns count of elements strictly smaller than k;
//erase,insert same as normal set
//#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
#define fast ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define f first
#define s second
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define forn(i,n) for(int i=0;i<n;++i)
#define show(b) for(auto const&x: b) cout<<x<<" "
#define sshow(b) for(auto x:b) cout<<x<<" "
#define fix(b,val) memset(b,val,sizeof(b))
#define pill(b,n,v) fill(b,b+n,v)
#define itn int
#define w(t) int t;cin>>t;while(t--)
#define intmax INT_MAX
#define intmin INT_MIN
#define nl "\n"
#define prt(val) cout<<val<<"\n"
#define all(v) v.begin(),v.end()
#define vt vector
#define trace1(x) cerr<<#x<<": "<<x<<endl
#define trace2(x, y) cerr<<#x<<": "<<x<<" | "<<#y<<": "<<y<<endl
#define trace3(x, y, z) cerr<<#x<<":" <<x<<" | "<<#y<<": "<<y<<" | "<<#z<<": "<<z<<endl
#define trace4(a, b, c, d) cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" | "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<endl
#define trace5(a, b, c, d, e) cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" | "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<" | "<<#e<< ": "<<e<<endl
#define trace6(a, b, c, d, e, f) cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" | "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<" | "<<#e<< ": "<<e<<" | "<<#f<<": "<<f<<endl
typedef long long int ll;
typedef long double LD;
typedef unsigned long long int LL;
typedef pair<int,int> pii;
typedef pair<long long int,int> pli;
typedef pair<int,long long int> pil;
typedef pair<long long int,long long int> pll;
const int N=1e5+5;
const int mod=1e9+7;
//mt19937 rnd(time(NULL));
/*------Global--------*/
/*-----Functions------*/
template<typename T>
void show2d(const vector<vector<T>>& adj)
{
for(auto x:adj)
{
for(auto y:x)
{
cout<<y<<" ";
}
cout<<"\n";
}
}
ll modexp(ll a,ll b,ll mod)
{
ll x=1;
while(b)
{
if(b&1)
x = ((x%mod) * (a%mod))%mod;
a = ((a%mod) * (a%mod))%mod;
b = b / 2;
}
return x;
}
bool ispalindrome(ll n)
{
ll rev=0,n1=n;
while(n1>0)
{
rev=rev*10+n1%10;
n1/=10;
}
return (n==rev);
}
void rf()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
}
void solve() {
int n,m;
cin>>n>>m;
ll a[n][m];
forn(i,n)
forn(j,m)
cin>>a[i][j];
int tr = n/2;
int tc = m/2;
ll ans=0;
for(int i=0; i<tr; ++i) {
for(int j=0; j<tc; ++j) {
ll p1 = a[i][j];
ll p2 = a[n-i-1][j];
ll p3 = a[i][m-j-1];
ll p4 = a[n-i-1][m-j-1];
array<ll,4> vals = {p1, p2, p3, p4};
sort(vals.begin(), vals.end());
ll avg = vals[2];
for(auto x:vals)
ans += abs(x-avg);
}
}
if(n&1) {
int i=0;
int j=m-1;
ll subans = 0;
while(i<j) {
if(a[n/2][i] != a[n/2][j]){
ans += abs(a[n/2][i] - a[n/2][j]);
}
++i;
--j;
}
}
if(m&1) {
int i=0;
int j=n-1;
ll subans =0;
while(i<j) {
if(a[i][m/2] != a[j][m/2]) {
ans += abs(a[i][m/2] - a[j][m/2]);
}
++i;
--j;
}
}
cout<<ans<<nl;
}
int32_t main()
{
fast;
// rf();
w(t)
{
solve();
}
}
Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSAidHJhcHYiCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgovLyNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgovL3VzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwovL2ZpbmRfYnlfb3JkZXIoaykgIHJldHVybnMgaXRlcmF0b3IgdG8ga3RoIGVsZW1lbnQgc3RhcnRpbmcgZnJvbSAwOwovL29yZGVyX29mX2tleShrKSByZXR1cm5zIGNvdW50IG9mIGVsZW1lbnRzIHN0cmljdGx5IHNtYWxsZXIgdGhhbiBrOwovL2VyYXNlLGluc2VydCBzYW1lIGFzIG5vcm1hbCBzZXQKCi8vI2RlZmluZSAgICAgIG9yZGVyZWRfc2V0IHRyZWU8aW50LCBudWxsX3R5cGUsIGxlc3M8aW50PiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4KI2RlZmluZSAgICAgICAgZmFzdCBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7Y2luLnRpZShOVUxMKTtjb3V0LnRpZShOVUxMKQojZGVmaW5lICAgICAgICBmIGZpcnN0CiNkZWZpbmUgICAgICAgIHMgc2Vjb25kCiNkZWZpbmUgICAgICAgIHBiIHB1c2hfYmFjawojZGVmaW5lICAgICAgICBlYiBlbXBsYWNlX2JhY2sKI2RlZmluZSAgICAgICAgbXAgIG1ha2VfcGFpcgojZGVmaW5lICAgICAgICBmb3JuKGksbikgZm9yKGludCBpPTA7aTxuOysraSkKI2RlZmluZSAgICAgICAgc2hvdyhiKSBmb3IoYXV0byBjb25zdCZ4OiBiKSBjb3V0PDx4PDwiICIKI2RlZmluZSAgICAgICAgc3Nob3coYikgZm9yKGF1dG8geDpiKSBjb3V0PDx4PDwiICIKI2RlZmluZSAgICAgICAgZml4KGIsdmFsKSAgIG1lbXNldChiLHZhbCxzaXplb2YoYikpCiNkZWZpbmUgICAgICAgIHBpbGwoYixuLHYpICBmaWxsKGIsYituLHYpCiNkZWZpbmUgICAgICAgIGl0biAgICAgICAgICBpbnQKI2RlZmluZSAgICAgICAgdyh0KSAgICAgaW50IHQ7Y2luPj50O3doaWxlKHQtLSkKI2RlZmluZSAgICAgICAgaW50bWF4ICAgIElOVF9NQVgKI2RlZmluZSAgICAgICAgaW50bWluICAgIElOVF9NSU4KI2RlZmluZSAgICAgICAgbmwgICAgICAgICJcbiIKI2RlZmluZSAgICAgICAgcHJ0KHZhbCkgIGNvdXQ8PHZhbDw8IlxuIgojZGVmaW5lICAgICAgICBhbGwodikgICAgdi5iZWdpbigpLHYuZW5kKCkKI2RlZmluZSAgICAgICAgdnQgICAgICAgIHZlY3RvcgojZGVmaW5lICAgICAgICB0cmFjZTEoeCkgICAgICAgICAgICAgICAgY2Vycjw8I3g8PCI6ICI8PHg8PGVuZGwKI2RlZmluZSAgICAgICAgdHJhY2UyKHgsIHkpICAgICAgICAgICAgIGNlcnI8PCN4PDwiOiAiPDx4PDwiIHwgIjw8I3k8PCI6ICI8PHk8PGVuZGwKI2RlZmluZSAgICAgICAgdHJhY2UzKHgsIHksIHopICAgICAgICAgIGNlcnI8PCN4PDwiOiIgPDx4PDwiIHwgIjw8I3k8PCI6ICI8PHk8PCIgfCAiPDwjejw8IjogIjw8ejw8ZW5kbAojZGVmaW5lICAgICAgICB0cmFjZTQoYSwgYiwgYywgZCkgICAgICAgY2Vycjw8I2E8PCI6ICI8PGE8PCIgfCAiPDwjYjw8IjogIjw8Yjw8IiB8ICI8PCNjPDwiOiAiPDxjPDwiIHwgIjw8I2Q8PCI6ICI8PGQ8PGVuZGwKI2RlZmluZSAgICAgICAgdHJhY2U1KGEsIGIsIGMsIGQsIGUpICAgIGNlcnI8PCNhPDwiOiAiPDxhPDwiIHwgIjw8I2I8PCI6ICI8PGI8PCIgfCAiPDwjYzw8IjogIjw8Yzw8IiB8ICI8PCNkPDwiOiAiPDxkPDwiIHwgIjw8I2U8PCAiOiAiPDxlPDxlbmRsCiNkZWZpbmUgICAgICAgIHRyYWNlNihhLCBiLCBjLCBkLCBlLCBmKSBjZXJyPDwjYTw8IjogIjw8YTw8IiB8ICI8PCNiPDwiOiAiPDxiPDwiIHwgIjw8I2M8PCI6ICI8PGM8PCIgfCAiPDwjZDw8IjogIjw8ZDw8IiB8ICI8PCNlPDwgIjogIjw8ZTw8IiB8ICI8PCNmPDwiOiAiPDxmPDxlbmRsCgp0eXBlZGVmICAgICAgIGxvbmcgbG9uZyBpbnQgbGw7CnR5cGVkZWYgICAgICAgbG9uZyBkb3VibGUgTEQ7CnR5cGVkZWYgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBMTDsKdHlwZWRlZiAgICAgICBwYWlyPGludCxpbnQ+IHBpaTsKdHlwZWRlZiAgICAgICBwYWlyPGxvbmcgbG9uZyBpbnQsaW50PiBwbGk7CnR5cGVkZWYgICAgICAgcGFpcjxpbnQsbG9uZyBsb25nIGludD4gcGlsOwp0eXBlZGVmICAgICAgIHBhaXI8bG9uZyBsb25nIGludCxsb25nIGxvbmcgaW50PiBwbGw7CmNvbnN0IGludCBOPTFlNSs1Owpjb25zdCBpbnQgbW9kPTFlOSs3OwovL210MTk5Mzcgcm5kKHRpbWUoTlVMTCkpOwoKLyotLS0tLS1HbG9iYWwtLS0tLS0tLSovCgovKi0tLS0tRnVuY3Rpb25zLS0tLS0tKi8KdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBzaG93MmQoY29uc3QgdmVjdG9yPHZlY3RvcjxUPj4mIGFkaikKewogICAgZm9yKGF1dG8geDphZGopCiAgICB7CiAgICAgICAgZm9yKGF1dG8geTp4KQogICAgICAgIHsgCiAgICAgICAgICAgY291dDw8eTw8IiAiOwogICAgICAgIH0KICAgIGNvdXQ8PCJcbiI7CiAgICB9Cn0KCmxsIG1vZGV4cChsbCBhLGxsIGIsbGwgbW9kKQp7CiAgICBsbCB4PTE7CiAgICB3aGlsZShiKQogICAgewogICAgICAgIGlmKGImMSkKICAgICAgICB4ID0gKCh4JW1vZCkgKiAoYSVtb2QpKSVtb2Q7CiAgICAgICAgYSA9ICgoYSVtb2QpICogKGElbW9kKSklbW9kOwogICAgICAgIGIgPSBiIC8gMjsKICAgIH0KICAgIHJldHVybiB4Owp9Cgpib29sIGlzcGFsaW5kcm9tZShsbCBuKQp7CiAgICBsbCByZXY9MCxuMT1uOwogICAgd2hpbGUobjE+MCkKICAgIHsKICAgICAgIHJldj1yZXYqMTArbjElMTA7CiAgICAgICBuMS89MTA7CiAgICB9CiAgICByZXR1cm4gKG49PXJldik7Cn0KCnZvaWQgcmYoKQp7CiAgICAjaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwogICAgI2VuZGlmCn0KCnZvaWQgc29sdmUoKSB7CiAgICBpbnQgbixtOwogICAgY2luPj5uPj5tOwogICAgbGwgYVtuXVttXTsKICAgIGZvcm4oaSxuKQogICAgZm9ybihqLG0pCiAgICBjaW4+PmFbaV1bal07CgogICAgaW50IHRyID0gbi8yOwogICAgaW50IHRjID0gbS8yOwoKICAgIGxsIGFucz0wOwoKICAgIGZvcihpbnQgaT0wOyBpPHRyOyArK2kpIHsKICAgICAgICBmb3IoaW50IGo9MDsgajx0YzsgKytqKSB7CiAgICAgICAgICAgIGxsIHAxID0gYVtpXVtqXTsKICAgICAgICAgICAgbGwgcDIgPSBhW24taS0xXVtqXTsKICAgICAgICAgICAgbGwgcDMgPSBhW2ldW20tai0xXTsKICAgICAgICAgICAgbGwgcDQgPSBhW24taS0xXVttLWotMV07CiAgICAgICAgICAgIAogICAgICAgICAgICBhcnJheTxsbCw0PiB2YWxzID0ge3AxLCBwMiwgcDMsIHA0fTsKICAgICAgICAgICAgc29ydCh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCkpOwogICAgICAgICAgICBsbCBhdmcgPSB2YWxzWzJdOwogICAgICAgICAgICBmb3IoYXV0byB4OnZhbHMpCiAgICAgICAgICAgICAgICBhbnMgKz0gYWJzKHgtYXZnKTsKICAgICAgICB9CiAgICB9CgogICAgaWYobiYxKSB7CiAgICAgICAgaW50IGk9MDsKICAgICAgICBpbnQgaj1tLTE7CiAgICAgICAgbGwgc3ViYW5zID0gMDsKICAgICAgICB3aGlsZShpPGopIHsKICAgICAgICAgICAgaWYoYVtuLzJdW2ldICE9IGFbbi8yXVtqXSl7CiAgICAgICAgICAgICAgICBhbnMgKz0gYWJzKGFbbi8yXVtpXSAtIGFbbi8yXVtqXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKytpOwogICAgICAgICAgICAtLWo7CiAgICAgICAgfQogICAgfQoKICAgIGlmKG0mMSkgewogICAgICAgIGludCBpPTA7CiAgICAgICAgaW50IGo9bi0xOwogICAgICAgIGxsIHN1YmFucyA9MDsKICAgICAgICB3aGlsZShpPGopIHsKICAgICAgICAgICAgaWYoYVtpXVttLzJdICE9IGFbal1bbS8yXSkgewogICAgICAgICAgICAgICAgYW5zICs9IGFicyhhW2ldW20vMl0gLSBhW2pdW20vMl0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgICsraTsKICAgICAgICAgICAgLS1qOwogICAgICAgIH0KICAgIH0KCiAgICBjb3V0PDxhbnM8PG5sOwp9CgppbnQzMl90IG1haW4oKQp7CiAgICBmYXN0OwogICAvLyByZigpOwogICAgdyh0KSAKICAgIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQp9