#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5;
int n, m, cnt[20], res;
bool a[maxn][20], vis[1 << 20];
vector<int> vec, trace;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
memset(vis, false, sizeof(vis));
cin >> n >> m;
for (int i = 0; i < n; ++i){
int mask = 0;
for (int j = 0; j < m; ++j){
cin >> a[i][j];
if (a[i][j]){
mask += (1 << j);
cnt[j]++;
}
}
vec.push_back(mask);
}
sort(vec.begin(), vec.end());
vec.erase(unique(vec.begin(), vec.end()), vec.end());
for (int mask : vec){
bool exist = false;
for (int sub = mask; sub > 0; sub = (sub - 1) & mask){
if (vis[sub]){
exist = true;
break;
}
}
if (!exist) trace.push_back(mask);
vis[mask] = true;
}
for (int i = 0; i < n; ++i){
int mask = 0, ans = 0;
for (int j = 0; j < m; ++j){
int cur = cnt[j];
if (a[i][j]) cur--;
if (cur >= n / 2) ans++;
if (cur == n / 2) mask += (1 << j);
}
int miss = __builtin_popcount(mask);
for (int other : trace) miss = min(miss, __builtin_popcount(mask & other));
cout << ans - miss << '\n';
}
return 0;
}