#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+5;
int cnt[N],n,k,ans[N],len;
struct node{
int a,b,c,id,w;
}c[N];
bool cmpa(node a,node b){
if(a.a==b.a){
if(a.b==b.b){
return a.c<b.c;
}
return a.b<b.b;
}
return a.a<b.a;
}
bool cmpb(node a,node b){
if(a.c==b.c){
return a.c<b.c;
}
return a.b<b.b;
}
namespace LowbitTree{
int t[N];
int lowbit(int x){
return x&(-x);
}
void add(int x,int w){
for(;x<=k;x+=lowbit(x))
t[x]+=w;
}
int res(int x){
int num=0;
for(;x;x-=lowbit(x)) num+=t[x];
return num;
}
void clear(){
for(int i=0;i<N;i++)
t[i]=0;
}
}
using namespace LowbitTree;
void CDQ(int L,int R){
if(L==R) return ;
int mid=(L+R)>>1,lt=L;
CDQ(L,mid);
CDQ(mid+1,R);
sort(c+L,c+mid+1,cmpb);
sort(c+mid+1,c+R+1,cmpb);
for(int i=mid+1;i<=R;i++){
while(lt<=mid&&c[lt].b<=c[i].b){
add(c[lt].c,c[lt].w);
lt++;
}
ans[c[i].id]+=res(c[i].c);
}
clear();
}
void outtong(){
int num=0;
for(int i=1;i<=n;i++){
num++;
if(c[i].a!=c[#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+5;
int cnt[N],n,k,ans[N],len;
struct node{
int a,b,c,id,w;
}c[N];
bool cmpa(node a,node b){
if(a.a==b.a){
if(a.b==b.b){
return a.c<b.c;
}
return a.b<b.b;
}
return a.a<b.a;
}
bool cmpb(node a,node b){
if(a.c==b.c){
return a.c<b.c;
}
return a.b<b.b;
}
namespace LowbitTree{
int t[N];
int lowbit(int x){
return x&(-x);
}
void add(int x,int w){
for(;x<=k;x+=lowbit(x))
t[x]+=w;
}
int res(int x){
int num=0;
for(;x;x-=lowbit(x)) num+=t[x];
return num;
}
void clear(){
for(int i=0;i<N;i++)
t[i]=0;
}
}
using namespace LowbitTree;
void CDQ(int L,int R){
if(L==R) return ;
int mid=(L+R)>>1,lt=L;
CDQ(L,mid);
CDQ(mid+1,R);
sort(c+L,c+mid+1,cmpb);
sort(c+mid+1,c+R+1,cmpb);
for(int i=mid+1;i<=R;i++){
while(lt<=mid&&c[lt].b<=c[i].b){
add(c[lt].c,c[lt].w);
lt++;
}
ans[c[i].id]+=res(c[i].c);
}
clear();
}
void outtong(){
int num=0;
for(int i=1;i<=n;i++){
num++;
if(c[i].a!=c[i+1].a||c[i].b!=c[i+1].b||c[i].c!=c[i+1].c){
len++;
c[len]=c[i];
c[len].id=len;
c[len].w=num;
num=0;
}
}
}
void Cin(){
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>c[i].a>>c[i].b>>c[i].c;
}
void Cout(){
for(int i=1;i<=len;i++)
cnt[ans[i]+c[i].w-1]+=c[i].w;
for(int i=0;i<n;i++)
cout<<cnt[i]<<'\n';
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
Cin();
sort(c+1,c+1+n,cmpa);
outtong();
CDQ(1,len);
Cout();
return 0;
}
i+1].a||c[i].b!=c[i+1].b||c[i].c!=c[i+1].c){
len++;
c[len]=c[i];
c[len].id=len;
c[len].w=num;
num=0;
}
}
}
void Cin(){
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>c[i].a>>c[i].b>>c[i].c;
}
void Cout(){
for(int i=1;i<=len;i++)
cnt[ans[i]+c[i].w-1]+=c[i].w;
for(int i=0;i<n;i++)
cout<<cnt[i]<<'\n';
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
Cin();
sort(c+1,c+1+n,cmpa);
outtong();
CDQ(1,len);
Cout();
return 0;
}