#include <bits/stdc++.h>
using namespace std;
int sum[2520][2520];
int n, m;
char ch[2520];
int lowbit(int x) { return (x & -x); }
int get(int i, int j) {
  if (i > n) i = n;
  if (j > m) j = m;
  int s = 0;
  while (i > 0) {
    int jj = j;
    while (jj > 0) {
      s += sum[i][jj];
      jj -= lowbit(jj);
    }
    i -= lowbit(i);
  }
  return s;
}
void add(int i, int j, int x) {
  while (i <= 2520) {
    int jj = j;
    while (jj <= 2520) {
      sum[i][jj] += x;
      jj += lowbit(jj);
    }
    i += lowbit(i);
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%s", ch);
    for (int j = 0; j < m; j++)
      if (ch[j] == '1') add(i, j + 1, 1);
  }
  int ans = 0x3f3f3f3f;
  int nn = max(n, m);
  for (int k = 2; k <= nn; k++) {
    int su = 0;
    int tx = 0, ty = 0;
    if (n % k == 0)
      tx = n / k;
    else
      tx = n / k + 1;
    if (m % k == 0)
      ty = m / k;
    else
      ty = m / k + 1;
    for (int i = 1; i <= tx; i++)
      for (int j = 1; j <= ty; j++) {
        int d = get(i * k, j * k);
        d -= get((i - 1) * k, j * k);
        d -= get(i * k, (j - 1) * k);
        d += get((i - 1) * k, (j - 1) * k);
        su += min(k * k - d, d);
      }
    ans = min(ans, su);
  }
  printf("%d\n", ans);
  return 0;
}
