#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;
}
