#include <bits/stdc++.h>
using namespace std;
const int MAXM = 1 << 20;
void setmin(int &a, int b) {
  if (a > b) {
    a = b;
  }
}
int N, M;
int A[MAXM];
int ppcnt[MAXM], mone[MAXM];
inline int getmn(int x) { return min(x, N - x); }
int cpair[1 << 8][13];
int main() {
  if (fopen("input.txt", "r")) {
    freopen("input.txt", "r", stdin);
  }
  scanf("%d %d", &N, &M);
  for (int i = 0; i < N; i++) {
    getchar();
    for (int j = 0; j < M; j++) {
      A[j] |= ((getchar() == '1') << i);
    }
  }
  for (int i = 1; i < (1 << N); i++) {
    ppcnt[i] = ppcnt[i >> 1] + (i & 1);
  }
  for (int i = 0; i < (1 << N); i++) {
    mone[i] = getmn(ppcnt[i]);
  }
  int ans = 2e9;
  if (N <= 12) {
    for (int i = 0; i < (1 << N); i++) {
      int n1 = 0;
      for (int j = 0; j < M; j++) {
        n1 += mone[A[j] ^ i];
      }
      setmin(ans, n1);
    }
    printf("%d\n", ans);
    return 0;
  }
  int cmp = N - 12;
  for (int i = 0; i < (1 << 12); i++) {
    memset((cpair), (0), sizeof(cpair));
    for (int j = 0; j < M; j++) {
      cpair[A[j] >> 12][ppcnt[(i ^ A[j]) & 4095]]++;
    }
    for (int j = 0; j < (1 << cmp); j++) {
      int sum = 0;
      for (int k = 0; k < (1 << cmp); k++) {
        int pc = ppcnt[j ^ k];
        for (int m = 0; m <= 12; m++) {
          sum += getmn(pc + m) * cpair[k][m];
        }
      }
      setmin(ans, sum);
    }
  }
  printf("%d\n", ans);
}
