#include <iostream>
#include <vector>
using namespace std;
#define pi pair<int,int>
const int INF = 1e9;
struct FirstSecond {
pi f, s;
FirstSecond() : f(INF, -1), s(INF, -1) {}
void add(int msk, int i){
int val = __builtin_popcount(msk);
pi par = {val, i};
if (par <= f){
s = f;
f = par;
} else if (par < s){
s = par;
}
}
void add(FirstSecond sec){
pi nf = sec.f, ns = sec.s;
if (f <= nf){
s = min(nf, s);
} else {
s = min(f, ns);
f = nf;
}
}
int get(int i){
return (i == f.second ? s.first : f.first);
}
void print(int ix){
cout << ix << ":\n";
cout << f.first << ' ' << f.second << " nigg\n";
cout << s.first << ' ' << s.second << " endddd\n";
cout << "---\n";
}
};
FirstSecond operator+(FirstSecond a, int v){
a.f.first += v;
a.s.first += v;
return a;
}
void solve(){
int N, M; cin >> N >> M;
vector<int> msk(N);
vector<int> votes(M, 0);
for (int i=0; i<N; ++i){
int s=0;
for (int j=0; j<M; ++j){
int x; cin >> x;
votes[j] += x;
s = (s << 1) + x;
}
msk[i] = s;
}
int mskVote=0;
int plus=0;
int nM=M;
for (int i=0; i<M; ++i){
if (votes[i] < N/2){
--nM;
votes[i] = -1;
} else if (votes[i]-2 >= N/2){
++plus; --nM;
votes[i] = -1;
} else if (votes[i] == N/2){
mskVote = (mskVote << 1) + 0;
} else if (votes[i]-1 == N/2){
mskVote = (mskVote << 1) + 1;
}
}
for (int i=0; i<N; ++i){
int ns=0;
for (int j=0; j<M; ++j){
if (votes[j] != -1){
ns = (ns << 1) + ((msk[i] & (1<<(M-j-1))) > 0);
}
}
msk[i] = ns;
}
int pt = (1 << nM);
vector<vector<FirstSecond> > dp(nM+1, vector<FirstSecond>(pt));
for (int i=0; i<N; ++i){
dp[0][msk[i]].add(msk[i], i);
}
for (int i=1; i<=nM; ++i){
for (int j=0; j<pt; ++j){
dp[i][j] = dp[i-1][j];
int bit = (1 << (i-1));
dp[i][j].add(dp[i-1][j ^ bit] + ((j & bit) > 0));
}
}
for (int i=0; i<N; ++i){
int k = mskVote ^ msk[i];
int v = __builtin_popcount(mskVote & (pt-1 - msk[i]));
int nv = nM - dp[nM][k].get(i);
cout << v + nv + plus << '\n';
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
solve();
return 0;
}