#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define Rg register ll
ll N, K, same[1000005], f[1000005];
struct Node {
ll a, b, c, idx;
bool op;
bool operator == (Node &o) {
return a == o.a && b == o.b && c == o.c;
}
}A[1000005], B[1000005], C[1000005];
bool operator <= (Node a, Node b) {
if(a.b < b.b) return true;
else if(a.b > b.b) return false;
if(a.c <= b.c) return true;
else return false;
}
bool cmp(Node x, Node o) {
if(x.a < o.a) return true;
else if(x.a > o.a) return false;
if(x.b < o.b) return true;
else if(x.b > o.b) return false;
if(x.c <= o.c) return true;
else return false;
}
void cdq2(ll l, ll r) {
if(l == r) return;
ll mid = (l + r) >> 1;
cdq2(l, mid); cdq2(mid + 1, r);
ll p1 = l, p2 = mid + 1, tot = l, tp = 0;
if(B[p1].op == 0) tp += same[B[p1].idx];
while(p2 <= r and p1 <= mid) {
while(p2 <= r and B[p2].c < B[p1].c) {
++p2;
}
while(p2 <= r and p1 + 1 <= mid and B[p1 + 1].c <= B[p2].c) {
++p1;
if(B[p1].op == 0) tp += same[B[p1].idx];
}
if(p2 > r) continue;
if(B[p2].op == 1) f[B[p2].idx] += tp;
++p2;
}
p1 = l; p2 = mid + 1;
while(p1 <= mid and p2 <= r) {
if(B[p1].c <= B[p2].c) {
C[tot++] = B[p1++];
}
else {
C[tot++] = B[p2++];
}
}
while(p1 <= mid) C[tot++] = B[p1++];
while(p2 <= r) C[tot++] = B[p2++];
for(Rg i = l; i <= r; ++i) B[i] = C[i];
return;
}
void cdq1(ll l, ll r) {
if(l == r) return;
ll mid = (l + r) >> 1;
cdq1(l, mid); cdq1(mid + 1, r);
for(Rg i = l; i <= mid; ++i) A[i].op = 0;
for(Rg i = mid + 1; i <= r; ++i) A[i].op = 1;
ll tot = l, p1 = l, p2 = mid + 1;
while(p1 <= mid && p2 <= r) {
if(A[p1] <= A[p2]) {
B[tot++] = A[p1++];
}else {
B[tot++] = A[p2++];
}
}
while(p1 <= mid) {
B[tot++] = A[p1++];
}
while(p2 <= r) {
B[tot++] = A[p2++];
}
for(Rg i = l; i <= r; ++i) A[i] = B[i];
cdq2(l, r);
return;
}
ll cnt = 0, Sum[1000005], T;
int main() {
cin >> N >> K;
for(Rg i = 1; i <= N; ++i) {
cin >> A[i].a >> A[i].b >> A[i].c;
}
sort(A + 1, A + N + 1, cmp);
for(Rg i = 1; i <= N; ++i) {
ll j = i;
C[++cnt] = A[i]; same[cnt] = 1;
while(j + 1 <= N and A[j + 1] == A[i]) same[cnt]++, ++j;
i = j;
}
T = N;
N = cnt;
for(Rg i = 1; i <= N; ++i) A[i] = C[i], A[i].idx = i;
cdq1(1, N);
for(Rg i = 1; i <= N; ++i) f[i] += same[i] - 1;
for(Rg i = 1; i <= N; ++i) {
Sum[f[i]] += same[i];
}
for(Rg i = 0; i < T; ++i) cout << Sum[i] << "\n";
return 0;
}