#include <bits/stdc++.h>
//#include <bits/extc++.h>
using namespace std;
#define USE_STD_IO 0
#if USE_STD_IO
#define fin cin
#define fout cout
#else
ifstream fin("cutii.in");
ofstream fout("cutii.out");
#endif // USE_STD_IO
typedef array<int, 3> Cutie;
const int NMAX = 3502;
Cutie c[NMAX + 2];
int n, t, i, j, k, rasp;
int aib[NMAX + 2][NMAX + 2];
static inline void AIBUpdate(int pi, int pj, const int val) {
for(int i = pi; i <= NMAX; i += (i & -i)) {
for(int j = pj; j <= NMAX; j += (j & -j)) aib[i][j] = max(aib[i][j], val);
}
}
static inline int AIBQuery(int pi, int pj) {
int rasp = 0;
for(int i = pi; i >= 1; i -= (i & -i)) {
for(int j = pj; j >= 1; j -= (j & -j)) rasp = max(rasp, aib[i][j]);
}
return rasp;
}
static inline void Test() {
for(i = 1; NMAX >= i; i++) {
for(j = 1; NMAX >= j; j++) aib[i][j] = 0;
}
for(i = 1; i <= n; i++) {
fin >> c[i][0] >> c[i][1] >> c[i][2];
}
sort(c + 1, c + n + 1);
rasp = 0;
for(i = 1; i <= n; i++) {
int ma = 1 + AIBQuery(c[i][1] - 1, c[i][2] - 1);
rasp = max(rasp, ma);
AIBUpdate(c[i][1], c[i][2], ma);
}
fout << rasp << '\n';
}
int main() {
#if USE_STD_IO
ios_base::sync_with_stdio(false);
#endif // USE_STD_IO
fin.tie(nullptr);
fout.tie(nullptr);
fin >> n >> t;
while(0 < t--) Test();
return 0;
}