Cod sursa(job #260059)
using namespace std;
#include <set>
#include <map>
#include <list>
#include <deque>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdio>
#include <vector>
#include <string>
#include <bitset>
#include <utility>
#include <algorithm>
#define pb push_back
#define sz size
#define f first
#define s second
#define II inline
#define si short int
#define db double
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define all(v) v.begin() , v.end()
#define CC(v) memset((v),0,sizeof((v)))
#define CP(v,w) memcpy((v),(w),sizeof((w)))
#define mp make_pair
typedef vector<int> VI;
typedef pair<si,si> pi;
typedef vector<string> VS;
#define IN "cutii.in"
#define OUT "cutii.out"
#define N_MAX 3501
#define bit(x) ((x)&(x-1))^(x)//(((x)&((x)-1))^(x))
si N,T;
si B[N_MAX],A[N_MAX][N_MAX];
II void scan()
{
freopen(IN,"r",stdin);
freopen(OUT,"w",stdout);
scanf("%i%i\n",&N,&T);
}
II void update(si x,si y,si val)
{
for(si i=x;i<=N;i += bit(i))
for(si j=y;j<=N;j += bit(j))
A[i][j] = max(A[i][j],val);
}
II si querry(si x,si y)
{
si sum(0);
for(si i=x;i>=1;i-= bit(i))
for(si j=y;j>=1;j-= bit(j))
sum = max(A[i][j],sum);
return sum;
}
vector< pair<si,pi> > V;
II void solve()
{
CC(A);CC(B);
si rez(0);
V.resize(N);
FOR(i,1,N)
scanf("%i%i%i\n",&V[i-1].f,&V[i-1].s.f,&V[i-1].s.s);
sort(V.begin(),V.end() );
FOR(i,1,N)
{
si x = V[i-1].s.f;
si y = V[i-1].s.s;
B[i] = querry(x,y) + 1;
update(x,y,B[i]);
rez = max(B[i],rez);
}
printf("%d\n",rez);
}
int main()
{
scan();
for(++T;--T;solve());
return 0;
}