#include <bits/stdc++.h>
#define MAXN 200003
using namespace std;
int n,k;
struct E{
int a,b,c;
int id;
};
E e[MAXN];
bool cmp1(E A,E B){
if (A.a==B.a){
if (A.b==B.b){
return A.c<B.c;
} else return A.b<B.b;
} else return A.a<B.a;
}
bool cmp2(E A,E B){
return A.b<B.b;
}
int t[MAXN];
int lowbit(int x){
return x&-x;
}
int SUM(int x){
int res=0;
while (x>0){
res+=t[x];
x-=lowbit(x);
}
return res;
}
void ADD(int x,int y){
while (x<=k){
t[x]+=y;
x+=lowbit(x);
}
return;
}
int cnt[MAXN];
void cdq(int l,int r){
if (l==r) return;
int mid=(l+r)>>1;
cdq(l,mid); cdq(mid+1,r);
sort(e+l,e+mid+1,cmp2); sort(e+mid+1,e+r+1,cmp2);
int i=l;
for (int j=mid+1;j<=r;j++){
while (e[i].b<=e[j].b&&i<=mid){
if (e[i].a==e[j].a&&e[i].b==e[j].b&&e[i].c==e[j].c){
cnt[e[i].id]++;
}
ADD(e[i].c,1);
i++;
}
cnt[e[j].id]+=SUM(e[j].c);
}
i--;
for (;i>=l;i--) ADD(e[i].c,-1);
return;
}
int ans[MAXN];
int main(){
cin>>n>>k;
for (int i=1;i<=n;i++){
scanf("%d %d %d",&e[i].a,&e[i].b,&e[i].c);
e[i].id=i;
}
sort(e+1,e+1+n,cmp1);
cdq(1,n);
for (int i=1;i<=n;i++){
ans[cnt[i]]++;
}
for (int i=0;i<=n-1;i++){
printf("%d\n",ans[i]);
}
return 0;
}