#include<cstdio>
#include<algorithm>
using namespace std;
struct R
{
int x,y,z;
}r[3501];
int n,l,i,b1[3501],l1[3501],l2[3501],b2[3501],p1[3501],p2[3501],x,r1,r2,c1[3501],c2[3501],u1,u2,m,p,j,t;
inline bool A(R a,R b)
{
return a.x<b.x;
}
inline int C(int v[],int x,int r,int l[])
{
int p=0,u=r,m;
m=(p+u)/2;
while(p<=u)
if(v[l[m]]<x&&v[l[m+1]]>=x)
return m;
else
if(v[l[m+1]]<x)
p=m+1,m=(p+u)/2;
else
u=m-1,m=(p+u)/2;
return r;
}
int main()
{
freopen("cutii.in","r",stdin),
freopen("cutii.out","w",stdout),
scanf("%d%d",&n,&t);
while(t--)
{
for(i=1;i<=n;i++)
scanf("%d%d%d",&r[i].x,&r[i].y,&r[i].z);
sort(r+1,r+n+1,A);
for(i=1;i<=n;i++)
b1[i]=r[i].y,b2[i]=r[i].z;
r1=r2=c1[1]=c2[1]=l2[1]=l1[1]=1,l2[0]=l1[0]=0;
for(i=2;i<=n;i++)
{
u1=C(b1,b1[i],r1,l1),p1[i]=l1[u1],c1[i]=u1+1,l1[u1+1]=i;
if(r1<u1+1)
r1=u1+1;
}
for(m=p=0,i=1;i<=n;i++)
if(c1[i]>m)
m=c1[i],p=1;
for(i=2;i<=n;i++)
{
u2=C(b2,b2[i],r2,l2),p2[i]=l2[u2],c2[i]=u2+1,l2[u2+1]=i;
if(r2<u2+1)
r2=u2+1;
}
for(i=1;i<=n;i++)
if(c2[i]>m)
m=c2[i],p=2;
if(p==2)
for(i=1;i<=n;i++)
x=c1[i],c1[i]=c2[i],c2[i]=x;
for(l=0,j=i=1;i<=n&&j<=m;i++)
if(c2[i]==j)
if(j<c1[i])
l++;
else
if(j==c1[i])
j++,l++;
printf("%d\n",l);
}
}