#include <stdio.h>
#include <stdlib.h>
#define MAXN 3500
int x[MAXN],y[MAXN],z[MAXN],l[MAXN];
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 *v){
int b=begin,e=end,pivot=v[(b+e)/2];
while(b<=e){
while(v[b]<pivot) b++;
while(v[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,v);
if(b<end) myqsort(b,end,v);
}
int main(){
FILE*fi,*fout;
int t,i,nr,j,max,n;
fi=fopen("cutii.in" ,"r");
fout=fopen("cutii.out" ,"w");
fscanf(fi,"%d%d" ,&n,&t);
while(t){
for(j=0;j<n;j++)
fscanf(fi,"%d%d%d" ,&x[j],&y[j],&z[j]);
myqsort(0,n-1,x);
l[n-1]=1;
nr=1;
for(i=n-2;i>=0;i--){
max=0;
for(j=i+1;j<n;j++){
if(max<l[j]&&y[i]<y[j]&&z[i]<z[j])
max=l[j];
}
l[i]=max+1;
if(l[i]>nr)
nr=l[i];
}
fprintf(fout,"%d\n" ,nr);
t--;
}
fclose(fi);
fclose(fout);
return 0;
}