#include <bits/stdc++.h>
using namespace std;
template <typename T>
using minpq = priority_queue<T, vector<T>, greater<T>>;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  vector<vector<int>> dp(n + 1, vector<int>(1 << n, 0));
  vector<string> s(n);
  for (int i = (0); i < (n); i++) cin >> s[i];
  for (int i = (0); i < (m); i++) {
    int mask = 0;
    for (int j = (0); j < (n); j++) {
      if (s[j][i] == '1') mask ^= (1 << j);
    }
    dp[0][mask]++;
  }
  for (int k = (1); k < (n + 1); k++) {
    for (int mask = (0); mask < (1 << n); mask++) {
      for (int i = (0); i < (n); i++) {
        dp[k][mask] += dp[k - 1][mask ^ (1 << i)] / max(1, k - 1);
      }
      if (k >= 2) dp[k][mask] -= (n - k + 2) * dp[k - 2][mask] / max(1, k - 2);
    }
  }
  int ans = INT_MAX;
  for (int mask = (0); mask < (1 << n); mask++) {
    int cnt = 0;
    for (int k = (1); k < (n + 1); k++) {
      cnt += (dp[k][mask] / k) * min(k, n - k);
    }
    ans = min(ans, cnt);
  }
  cout << ans << '\n';
}
