#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
struct arrElement {
int l, r;
} y[N];
struct Node {
int l, r, mi;
void init(int p) {
l = r = p;
mi = 1e9;
}
} z[N << 2];
Node operator + (const Node &lhs, const Node &rhs) {
Node res;
res.l = lhs.l;
res.r = rhs.r;
res.mi = min(lhs.mi, rhs.mi);
return res;
}
void build(int l, int r, int rt) {
if (l == r) {
z[rt].init(l);
return ;
}
int mid = l + r >> 1;
build(l, mid, rt << 1);
build(mid + 1, r, rt << 1 | 1);
z[rt] = z[rt << 1] + z[rt << 1 | 1];
}
int query_min(int l, int r, int rt, int nowl, int nowr) {
if (nowl <= l && r <= nowr)
return z[rt].mi;
int mid = l + r >> 1, mi = 1e9;
if (nowl <= mid)
mi = min(mi, query_min(l, mid, rt << 1, nowl, nowr));
if (mid < nowr)
mi = min(mi, query_min(mid + 1, r, rt << 1 | 1, nowl, nowr));
return mi;
}
void modify(int l, int r, int rt, int p, int v) {
if (l == r)
z[rt].mi = min(z[rt].mi, v);
else {
int mid = l + r >> 1;
if (p <= mid)
modify(l, mid, rt << 1, p, v);
else
modify(mid + 1, r, rt << 1 | 1, p, v);
z[rt] = z[rt << 1] + z[rt << 1 | 1];
}
}
signed main() {
int T;
cin >> T;
while (T --) {
int m, n;
cin >> m >> n;
for (int i = 1; i <= (m << 2); i ++)
z[i].l = z[i].r = 0, z[i].mi = 1e9;
build(1, m, 1);
for (int i = 1; i <= n; i ++)
cin >> y[i].l >> y[i].r;
int ans = 0;
modify(1, m, 1, 1, 0);
for (int i = 1; i <= n; i ++) {
ans = query_min(1, m, 1, y[i].l, y[i].r);
modify(1, m, 1, y[i].r, ans + 1);
}
cout << query_min(1, m, 1, m, m) << '\n';
if (T)
cout << '\n';
}
return 0;
}