#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
#define fi first
#define se second
#define pop __builtin_popcount
const int MAXN = 300000, MAXM = 20, MAXM2 = 1048576, MAXM4 = 1024, INF = MAXN*67;
typedef bitset<MAXN> tt;
int n, m;
int a[MAXN], s[MAXM];
pii memo[MAXM4];
tt dp1[MAXM4][10], dp2[MAXM4][10];
pii dp(int msk){
auto& mem = memo[msk];
if(mem.fi != -1){
return mem;
}
auto& [m1, m2] = mem;
m1 = INF, m2 = INF;
for(int i=0; i<n; i++){
int cur = pop(a[i] & msk);
if(cur <= m1){
m2 = m1;
m1 = cur;
}
else if(cur < m2){
m2 = cur;
}
}
return mem;
}
signed main(){
ios_base::sync_with_stdio(0); cin.tie(0);
memset(memo, -1, sizeof(memo));
cin >> n >> m;
int x = n/2;
for(int i=0; i<n; i++){
for(int j=0, aij; j<m; j++){
cin >> aij;
if(aij){
a[i] ^= (1<<j);
s[j]++;
}
}
}
int m2 = m/2, m3 = m-m2;
for(int msk=0; msk<(1<<m2); msk++){
auto cdp = dp1[msk];
for(int i=0; i<n; i++){
int cur = pop(a[i] & msk);
//cerr << 'a' << msk << ' ' << i << ' ' << cur << '\n';
cdp[cur][i] = 1;
}
}
for(int msk=0; msk<(1<<m3); msk++){
auto cdp = dp2[msk];
for(int i=0; i<n; i++){
int cur = pop(a[i] & (msk<<m2));
//cerr << 'b' << msk << ' ' << i << ' ' << cur << '\n';
cdp[cur][i] = 1;
}
}
int tot = 0, r = 0;
for(int i=0; i<m; i++){
if(s[i] >= x){
tot++;
}
if(s[i] == x){
r ^= (1<<i);
}
}
for(int i=0; i<n; i++){
int cr = r, d = 0;
for(int j=0; j<m; j++){
if(!(a[i] & (1<<j))) continue;
if(s[j] == x){
cr ^= (1<<j);
d++;
}
else if(s[j] == x+1){
cr ^= (1<<j);
}
}
int g = 67;
int msk1 = cr & ((1<<m2)-1), msk2 = cr >> m2;
//cerr << msk1 << ' ' << msk2 << '\n';
for(int j=0; j<=m2; j++){
for(int k=0; k<=m3; k++){
tt cb = dp1[msk1][j] & dp2[msk2][k];
cb[i] = 0;
//cerr << j << ' ' << k << ' ' << cb.any() << '\n';
if(cb.any()){
g = min(g, j+k);
}
}
}
cout << tot - d - g << '\n';
}
return 0;
}