#include <stdio.h>
#include <stdlib.h>
#define MAXN 3500
#define zeros(x) (x&(-x))
int x[MAXN],y[MAXN],z[MAXN],aib[MAXN+1][MAXN+1],D[MAXN+1];
inline void swap(int b,int e,int *v){
int aux=v[b];
v[b]=v[e];
v[e]=aux;
}
void myqsort(int begin,int end){
int b=begin,e=end,pivot=x[(b+e)/2];
while(b<=e){
while(x[b]<pivot) b++;
while(x[e]>pivot) e--;
if(b<=e){
swap(b,e,x);
swap(b,e,y);
swap(b,e,z);
b++;
e--;
}
}
if(begin<e) myqsort(begin,e);
if(b<end) myqsort(b,end);
}
inline int querry(int l,int c){
int max=0,i,j;
for(i=l;i>0;i-=zeros(i))
for(j=c;j>0;j-=zeros(j))
if(D[aib[i][j]]>max)
max=D[aib[i][j]];
return max;
}
inline void update(int l,int c,int poz,int n){
int i,j;
for(i=l;i<=n;i+=zeros(i))
for(j=c;j<=n;j+=zeros(j))
if(D[poz]>D[aib[i][j]])
aib[i][j]=poz;
}
int main(){
FILE*fi,*fout;
int t,i,n,max,j;
fi=fopen("cutii.in" ,"r");
fout=fopen("cutii.out" ,"w");
fscanf(fi,"%d%d" ,&n,&t);
while(t){
for(i=1;i<=n;i++)
fscanf(fi,"%d%d%d" ,&x[i],&y[i],&z[i]);
myqsort(1,n);
max=0;
for(i=1;i<=n;i++){
D[i]=querry(y[i]-1,z[i]-1)+1;
update(y[i],z[i],i,n);
if(D[i]>max)
max=D[i];
}
memset(D,0,sizeof(D));
for(i=1;i<=n;i++)
memset(aib[i],0,sizeof(aib[i]));
fprintf(fout,"%d\n" ,max);
t--;
}
fclose(fi);
fclose(fout);
return 0;
}