#include <bits/stdc++.h>
using namespace std;
char mp[5500][5500];
int sum[5500][5500];
const int INF = 0x3f3f3f3f;
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) scanf("%s", mp[i] + 1);
  for (int i = 1; i <= n; ++i) {
    int tot = 0;
    for (int j = 1; j <= m; ++j) {
      if (mp[i][j] == '1') ++tot;
      sum[i][j] = tot;
    }
  }
  int mm = max(n, m), ans = INF;
  for (int k = mm; k > 1; --k) {
    bool fi = true;
    int i, j, tj = k, ti = k, t0 = 0, t1 = 0, tans = 0;
    for (i = 1; i <= ti; ++i) {
      if (i > n || tj > m) {
        if (i > n) fi = false;
        if (i > n)
          t0 += k;
        else {
          t1 += sum[i][m] - sum[i][tj - k];
          t0 += k - (sum[i][m] - sum[i][tj - k]);
        }
      } else {
        if (i == n) fi = false;
        t1 += sum[i][tj] - sum[i][tj - k];
        t0 += k - (sum[i][tj] - sum[i][tj - k]);
      }
      if (i == ti) {
        tans += min(t0, t1);
        t0 = 0, t1 = 0;
      }
      if (i == ti && tj < m) {
        tj += k;
        i = ti - k;
      } else if (i == ti && fi && tj >= m) {
        ti += k;
        tj = k;
      }
    }
    ans = min(ans, tans);
  }
  printf("%d\n", ans);
  return 0;
}
