#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 7;
int dp[1 << 3][maxn], num[1 << 3][maxn];
char ch[4][maxn], a[4][maxn];
int n, m;
void solve(int j, int tmp, int i) {
  int _tmp = tmp, _j = j, t = 1;
  if ((_j & t) != (t & _tmp)) num[j][i]++;
  t <<= 1;
  if ((_j & t) != (t & _tmp)) num[j][i]++;
  t <<= 1;
  if ((_j & t) != (t & _tmp)) num[j][i]++;
}
bool check(int i, int j, int k) {
  int t = 1, ans = 0;
  bool f1 = false;
  if (t & j) ans++;
  if (t & k) ans++;
  t <<= 1;
  if (t & j) ans++;
  if (t & k) ans++;
  if (ans & 1) f1 = true;
  if (!f1) return false;
  bool f2 = false;
  if (n == 3) {
    ans = 0;
    if (t & j) ans++;
    if (t & k) ans++;
    t <<= 1;
    if (t & j) ans++;
    if (t & k) ans++;
    if (ans & 1) f2 = true;
    if (f1 && f2)
      return true;
    else
      return false;
  }
  return true;
}
int main() {
  scanf("%d%d", &n, &m);
  if (n >= 4 && m >= 4) {
    for (int i = 0; i < n; i++) scanf("%s", ch[0]);
    printf("-1\n");
  } else if (n == 1 || m == 1) {
    scanf("%s", ch[0]);
    printf("0\n");
  } else {
    for (int i = 0; i < n; i++) scanf("%s", ch[i]);
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++) a[i + 1][j + 1] = ch[i][j] - '0';
    for (int i = 1; i <= m; i++) {
      int tmp = 0;
      for (int j = 1; j <= n; j++) {
        tmp <<= 1;
        tmp += a[j][i];
      }
      num[tmp][i] = 0;
      for (int j = 0; j < (1 << n); j++) solve(j, tmp, i);
    }
    for (int i = 0; i < (1 << n); i++) dp[i][1] = num[i][1];
    for (int i = 2; i <= m; i++) {
      for (int j = 0; j < (1 << n); j++) {
        int tmp = 0x3f3f3f3f;
        for (int k = 0; k < (1 << n); k++) {
          if (check(i, j, k)) tmp = min(dp[k][i - 1] + num[j][i], tmp);
        }
        dp[j][i] = tmp;
      }
    }
    int ans = 0x3f3f3f3f;
    for (int i = 0; i < (1 << n); i++) ans = min(ans, dp[i][m]);
    printf("%d\n", ans);
  }
  return 0;
}
