#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k;
struct node
{
int s,c,m,sum,id;
}a[500005],e[500005];
int ans[500005],res[500005];
int cnt=0;
bool cmp(node xx,node yy)
{
if(xx.s!=yy.s) return xx.s<yy.s;
if(xx.c!=yy.c) return xx.c<yy.c;
if(xx.m!=yy.m) return xx.m<yy.m;
}
bool cmp2(node xx,node yy){
if(xx.c==yy.c) return xx.m<yy.m;
return xx.c<yy.c;
}
int tree[500005];
void add(int x,int c)
{
for(;x<=400005;x+=x&-x) tree[x]+=c;
}
int query(int x)
{
int res=0;
for(;x;x-=x&-x) res+=tree[x];
return res;
}
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+1+mid,cmp2);sort(e+mid+1,e+1+r,cmp2);
int ll=l,rr=mid+1;
while(ll<=mid||rr<=r)
{
if(ll<=mid&&(rr>r||e[ll].c<=e[rr].c))
{
add(e[ll].m,e[ll].sum);
ll++;
}
else
{
ans[e[rr].id]+=query(e[rr].m);
rr++;
}
}
for(int i=l;i<=mid;i++) add(e[i].m,-e[i].sum);
}
signed main()
{
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%lld",&a[i].s,&a[i].c,&a[i].m);
}
sort(a+1,a+1+n,cmp);
int j=0;
for(int i=1;i<=n;i=j+1)
{
j++;node lst=a[i];
e[++cnt]=a[i];
while(a[j+1].s==lst.s&&a[j+1].c==lst.c&&a[j+1].m==lst.m&&j+1<=n) j++;
e[cnt].sum=j-i+1;
e[cnt].id=cnt;
}
Cdq(1,cnt);
for(int i=1;i<=cnt;i++)
res[ans[i]+e[i].sum-1]+=e[i].sum;
for(int i=0;i<n;i++) printf("%lld\n",res[i]);
return 0;
}