#include <bits/stdc++.h>
#pragma GCC optimize ("O2")
using namespace std;
#define int long long
#define double long double
#define vc vector<char>
#define vi vector<int>
#define vii vector<vi>
#define viii vector<vii>
#define viiii vector<viii>
#define viiiii vector<viiii>
#define vb vector<bool>
#define vbb vector<vb>
#define pi pair<int, int>
#define ppi pair<pair<int, int>, int>
#define pip pair<int, pair<int, int>>
#define endl '\n'
#define PI acos(-1)
#define all(vec) vec.begin(), vec.end()
#define Point pair<pair<int, int>, pair<int, int>>
#define X first.first
#define Y first.second
#define C second.first
#define T second.second
// mt19937 rng(chrono::system_clock::now().time_since_epoch().count());
// uniform_int_distribution<int> dist(l, r);
const int mod = 998244353;
const int maxn = 22;
const int p1 = 911382323;
const int p2 = 496719319;
const int maxval = 128;
const double eps = 1e-9;
const int S = 550;
const int inf = 1e18;
int cntb(int x) { return __builtin_popcount(x); }
void solve() {
int n, m;
cin >> n >> m;
vi a(n, 0), cnt(m, 0);
map<int, int> mp;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int x;
cin >> x;
a[i] |= (1<<j) * x;
cnt[j] += x;
}
mp[a[i]]++;
}
int tot = (1<<m);
vii f(tot, vi(m+1, m));
for (int x : a) f[x][m] = 0;
for (int d = 0; d < n; d++) {
if (mp[a[d]] == 1) { f[a[d]][m] = m; }
for (int i = m-1; i >= 0; i--) {
for (int mask = 0; mask < tot; mask++) {
if (mask & (1<<i)) f[mask][i] = min(f[mask ^ (1<<i)][i+1], f[mask][i+1] + 1);
else f[mask][i] = min(f[mask][i+1], f[mask ^ (1<<i)][i+1]);
}
}
int t = n/2;
int x = a[d];
int mask = 0, res = 0;
for (int j = 0; j < m; j++) {
int c = cnt[j];
if (x & (1<<j)) c--;
if (c >= t) res++;
if (c == t) mask |= (1<<j);
}
// cerr << res << ' ' << mask << ' ' << f[mask][0] << endl;
f[a[d]][m] = 0;
cout << res - f[mask][0] << endl;
}
}
/*
*/
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
bool test = 0;
int t;
if (test) cin >> t;
else t = 1;
while (t--) solve();
return 0;
}