#include <bits/stdc++.h>
using namespace std;
int n, k;
struct node {
  vector<int> mx, mn;
  int sz;
  node() {
    sz = 1;
    mx.resize(k), mn.resize(k);
  }
  bool can_beat(const node &b) const {
    for (int i = 0; i < k; i++)
      if (mx[i] > b.mn[i]) return 1;
    return 0;
  }
  bool operator<(const node &s) const {
    return can_beat(s) && !s.can_beat(*this);
  }
};
int main() {
  scanf("%d%d", &n, &k);
  set<node> st;
  for (int i = 0; i < n; i++) {
    node d;
    for (int j = 0; j < k; j++) scanf("%d", &d.mn[j]), d.mx[j] = d.mn[j];
    auto it = st.lower_bound(d);
    while (it != st.end() && it->can_beat(d)) {
      d.sz += it->sz;
      for (int j = 0; j < k; j++)
        d.mx[j] = max(d.mx[j], it->mx[j]), d.mn[j] = min(d.mn[j], it->mn[j]);
      st.erase(it++);
    }
    st.insert(d);
    printf("%d\n", st.begin()->sz);
  }
  return 0;
}
