#include <bits/stdc++.h>   using namespace std;   int n, m, INF = 2e9;   vector<vector<int>> value;   void shift_column(int j, int k) {     vector<int> res(n);     for (int i = 0; i < n; i++) res[(i - k + n) % n] = value[i][j];     for (int i = 0; i < n; i++) value[i][j] = res[i];   }   void run() {     cin >> n >> m;     value.resize(n, vector<int>(m));     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         cin >> value[i][j];       }     }     int ans = 0;     for (int j = 0; j < m; j++) {       map<int, int> pos;       vector<int> cnt(n);       for (int i = 0; i < n; i++) pos[1 + j + i * m] = i;       for (int i = 0; i < n; i++) {         if (pos.find(value[i][j]) == pos.end()) continue;         int shift = (i - pos[value[i][j]] + n) % n;         cnt[shift]++;       }       auto best_shift =           distance(cnt.begin(), max_element(cnt.begin(), cnt.end()));       shift_column(j, best_shift);       int best_add = INF;       for (int i = 0; i < n; i++) best_add = min(best_add, n - cnt[i] + i);       ans += best_add;     }     cout << ans;   }   signed main() {     cout.setf(ios::fixed);     cout.precision(10);     cin.tie(0);     cout.tie(0);     ios::sync_with_stdio(0);     run();     return 0;   }   