#include <bits/stdc++.h>
#define int long long
#define fs first
#define sc second
#define ls (u << 1)
#define rs (u << 1 | 1)
#define mid ((l + r) >> 1)
#define lc ls, l, mid
#define rc rs, mid + 1, r
#define rep(i, l, r) for (int i = (l); i <= (r); ++i)
#define per(i, r, l) for (int i = (r); i >= (l); --i)
#define gc getchar
#define pc putchar
using namespace std;
using pii = pair<int, int>;
using vi = vector<int>;
const int maxn = 1e6 + 10;
const int maxm = 22;
const bool multidata = 0;
int read() {
int x = 0, f = 1; char c = gc();
while (c < '0' || c > '9') { if (c == '-') f = -f; c = gc(); }
while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = gc();
return x * f;
}
void write(int x) {
if (x < 0) pc('-'), x = -x;
if (x < 10) return void (pc(x + '0'));
write(x / 10), pc(x % 10 + '0');
}
int n, m, msk, tmp;
int a[maxn], b[maxn], c[1 << maxm];
int p[1 << maxm];
pii f[1 << maxm], g[1 << maxm];
int cnt[maxm];
int S;
bool cmp(int x, int y) {
return p[b[x] & S] > p[b[y] & S];
}
pii merge(pii x, pii y) {
vector<int> u;
if (x.fs) u.push_back(x.fs); if (x.sc) u.push_back(x.sc);
if (y.fs) u.push_back(y.fs); if (y.sc) u.push_back(y.sc);
sort(u.begin(), u.end(), cmp); u.resize(unique(u.begin(), u.end()) - u.begin());
pii ans;
if (u.size() >= 2) ans = {u[0], u[1]};
else ans = {(u.size() ? u[0] : 0), 0};
return ans;
}
void fake_main() {
pii x;
n = read(), m = read(), msk = (1 << m) - 1;
rep(i, 1, n) rep(j, 0, m - 1) a[i] |= ((tmp = read()) << j), cnt[j] += tmp;
rep(i, 1, n) g[b[i] = msk ^ a[i]] = {i, 0};
rep(i, 0, m) rep(s, 0, msk) if (!(s >> i & 1)) g[s] = merge(g[s], g[s ^ (1 << i)]);
rep(s, 0, msk) f[s] = g[s], p[s] = __builtin_popcount(s);
rep(i, 0, m) rep(s, 0, msk) if (s >> i & 1) S = s, f[s] = merge(f[s], f[s ^ (1 << i)]);
// rep(s, 0, msk) {
// write(s), pc('\n');
// write(g[s].fs), pc(' '), write(g[s].sc), pc('\n');
// write(f[s].fs), pc(' '), write(f[s].sc), pc('\n');
// }
rep(i, 1, n) {
int s = 0, ans = 0, qwq = 0;
rep(j, 0, m - 1) {
tmp = cnt[j] - (a[i] >> j & 1);
if (tmp == n / 2) s |= (1 << j);
else if (tmp > n / 2) ++ans;
}
if (f[s].fs == i) write(ans + p[b[f[s].sc] & s]), pc('\n');
else write(ans + p[b[f[s].fs] & s]), pc('\n');
}
}
signed main() {
int T = multidata ? read() : 1;
while (T--) fake_main();
return 0;
}