#include<bits/stdc++.h>
#define mids(l,r) const auto mid = l + r >> 1
#define cint const int&
using namespace std;
const int maxn = 5e5+10;
int n,m,k;
struct data {
int a,b,c;
int cnt,ans;
bool ta;
}p[maxn],tmp[maxn];
using cdt = const data&;
inline bool cmpc(cdt u,cdt v) {return u.c < v.c;}
inline bool cmpb(cdt u,cdt v) {return u.b == v.b ? cmpc(u,v) : u.b < v.b;}
inline bool cmpa(cdt u,cdt v) {return u.a == v.a ? cmpb(u,v) : u.a < v.a;}
void cdqb(cint l,cint r) {
if(l == r) return;
mids(l,r);
cdqb(l,mid),cdqb(mid+1,r);
sort(p+l,p+mid+1,cmpc),
sort(p+mid+1,p+r+1,cmpc);
int i = l,j= mid+1,tc =0 ;
for(;j<=r;++j){
while(i <= mid && p[i].c <= p[j].c) {
if(p[i].ta == 0) tc += p[i].cnt;
++i;
}
if(p[j].ta) p[j].ans += tc;
}
}
inline void outs(cint l,cint r) {
cout<<"l: "<<l<<",r: "<<r<<'\n';
for(int i = l;i<=r;++i) cout<<"{"<<p[i].a<<','<<p[i].b<<','<<p[i].c<<"},";
cout<<'\n';
}
void cdqa(cint l,cint r) {
if(l == r) return;
mids(l,r);
cdqa(l,mid),cdqa(mid+1,r);
for(int i = l;i<=mid;++i) p[i].ta = 0;
for(int i = mid+1;i<=r;++i) p[i].ta = 1;
sort(p+l,p+r+1,cmpb);
cdqb(l,r);
sort(p+l,p+r+1,cmpa);
}
int ans[maxn];
signed main() {
ios::sync_with_stdio(0),cin.tie(0);
cin>>n>>k;
for(int i = 1;i<=n;++i) cin>>p[i].a>>p[i].b>>p[i].c;
sort(p+1,p+n+1,cmpa);
for(int tc = 0,i = 1;i<=n;++i){
++tc;
if(p[i].a != p[i+1].a || p[i].b != p[i+1].b || p[i].c != p[i+1].c) {
p[++m] = p[i];
swap(p[m].cnt,tc);
}
}
cdqa(1,m);
for(int i = 1;i<=m;++i)
ans[p[i].ans + p[i].cnt - 1] += p[i].cnt;
for(int i = 0;i<n;++i) cout<<ans[i]<<'\n';
}