#include <iostream>
#include <algorithm>
using namespace std;
struct TLEWA {int a, b, c, v, id;} a[1000005], b[1000005]; int f[1000005], ans[1000005];
long long pref[1000005]
;void addd(int x, long long v) {for (int j=x; j<=1000000; j+=j&-j) pref[j] += v;} long long query(int x) {long long summ=0; for (int j=x; j; j-=j&-j) summ += pref[j]; return summ;}
void seele(int l, int r) {
if (l == r) return;
int mid = (l + r) / 2; seele(l, mid); seele(mid+1, r);
sort(b+l, b+r+1, [](TLEWA x, TLEWA y){return x.b < y.b;}); for (int i=l; i<=r; i++) if (b[i].id <= mid) addd(b[i].c, b[i].v); else f[b[i].id] += query(b[i].c); for (int i=l; i<=r; i++) if (b[i].id <= mid) addd(b[i].c, -b[i].v);
}
int main() {
int n, k, cnt=0; cin >> n >> k; for (int i=1; i<=n; i++) cin >> a[i].a >> a[i].b >> a[i].c; sort(a+1, a+1+n, [](TLEWA x, TLEWA y){return x.a != y.a ? x.a < y.a : (x.b != y.b ? x.b < y.b : x.c < y.c);});
for (int i=1; i<=n; i++) if (a[i].a != a[i-1].a || a[i].b != a[i-1].b || a[i].c != a[i-1].c) b[++cnt] = a[i], b[cnt].id = cnt, b[cnt].v = 1; else b[cnt].v++;
seele(1, cnt); for (int i=1; i<=cnt; i++) ans[f[i]]++; for (int i=0; i<n; i++) cout << ans[i] << endl;
}