#include <bits/stdc++.h>
using namespace std;
int dp[10][300];
int s[10][10];
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < int(n); ++i)
    for (int j = 0; j < int(m); ++j) cin >> s[i][j];
  int *cur = dp[0], *next = dp[1];
  for (int i = n - 1; i >= 0; --i) {
    for (int j = m - 1; j >= 0; --j) {
      for (int used = 0; used < int(1 << m); ++used) {
        if (used & (1 << j)) {
          next[used] = cur[used & ~(1 << j)];
        } else {
          int best = 0;
          if (j + 1 < m && !(used & (1 << (j + 1))))
            best = max(best,
                       cur[used | (1 << (j + 1))] + (s[i][j] == s[i][j + 1]));
          if (i + 1 < n)
            best = max(best, cur[used | (1 << j)] + (s[i][j] == s[i + 1][j]));
          next[used] = best;
        }
      }
      swap(cur, next);
    }
  }
  cout << n * m / 2 - cur[0] << endl;
}
