#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned ll
#define ld long double
typedef vector<int> vi;
typedef multiset<int> mi;
typedef multiset<ll> mll;
typedef vector<ll> vll;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef set<ll> sll;
typedef vector<vector<int>> _2vi;
typedef vector<vector<ll>> _2vll;
#define all(v) ((v).begin()), ((v).end())
#define sz(v) ((ll)((v).size()))
#define vinp(v, n) \
for (ull i = 0; i < (n); i++) \
cin >> (v)[i]
#define printv(v) \
for (auto i : (v)) \
cout << i << " "
#define fr0(i, n) for (ull(i) = 0; (i) < (n); (i)++)
#define fr1(i, n) for (ull(i) = 1; (i) < (n); (i)++)
#define fr(i, x, n) for (ull(i) = (x); (i) < (n); (i)++)
#define _CRT_SECURE_NO_WARNING
const ll MOD = 1000000007;
void Bustany() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
#ifndef ONLINE_JUDGE
freopen("./in.txt", "r", stdin), freopen("./out.txt", "w", stdout);
#endif
}
const ll N = 1e5 + 5;
vector<sll> adj(N);
//_2vll adj(N,vll(N));
vb vis;
#define int ll
struct FenwickTreeOneBasedIndexing {
vector<int> bit; // binary indexed tree
int n;
FenwickTreeOneBasedIndexing(int n) {
this->n = n + 1;
bit.assign(n + 1, 0);
}
// FenwickTreeOneBasedIndexing(vector<int> a)
// : FenwickTreeOneBasedIndexing(a.size()) {
//// bit.resize(a.size());
//// for (size_t i = 0; i < a.size(); i++)
//// add(i, a[i]);
// }
int sum(int idx) {
int ret = 0;
for (++idx; idx > 0; idx -= idx & -idx)
ret += bit[idx];
return ret;
}
int sum(int l, int r) {
return sum(r) - sum(l - 1);
}
void add(int idx, int val) {
for (++idx; idx < n; idx += idx & -idx)
bit[idx] += val;
}
void range_add(int l, int r, int val) {
add(l, val);
add(r + 1, -val);
}
int point_query(int idx) {
int ret = 0;
for (++idx; idx > 0; idx -= idx & -idx)
ret += bit[idx];
return ret;
}
};
#undef int
ll SKIP_VALUE = 0;
#define int long long
struct Node {
int val, lazy;
bool isLazy;
Node(int val = SKIP_VALUE, int lazy = 0, bool isLazy = false) : val(val), lazy(lazy), isLazy(isLazy) {}
};
class SegmentTree {
private:
vector<Node> tree;
ll sz;
#define mid ((r + l) >> 1)
#define L node * 2 + 1
#define R node * 2 + 2
Node merge(Node a, Node b) {
return Node(a.val + b.val);
}
Node build(ll l, ll r, ll node, vector<ll> &a) {
if (l == r) {
if (l < (int) a.size()) return (tree[node] = Node(a[l]));
return Node();
}
return tree[node] = merge(build(l, mid, L, a), build(mid + 1, r, R, a));
}
// apply lazy on the node
void apply(int l, int r, int node) {
tree[node].val = (r - l + 1) * tree[node].lazy;
tree[node].lazy = 0;
tree[node].isLazy = 0;
}
// add val on to lazy of the node
void push(int node, int val) {
tree[node].lazy = val;
tree[node].isLazy = 1;
}
void propegate(ll l, ll r, ll node) {
if (!tree[node].isLazy) return;
if (l != r) {
push(L, tree[node].lazy);
push(R, tree[node].lazy);
}
apply(l, r, node);
}
void update(ll l, ll r, ll node, ll tl, ll tr, ll val) {
propegate(l, r, node);
if (l > tr || r < tl) return;
if (l >= tl && r <= tr) {
push(node, val);
propegate(l, r, node);
return;
}
update(l, mid, L, tl, tr, val);
update(mid + 1, r, R, tl, tr, val);
tree[node] = merge(tree[L], tree[R]);
}
Node query(ll l, ll r, ll node, ll tl, ll tr) {
propegate(l, r, node);
if (tl > r || tr < l) return Node();
if (l >= tl && r <= tr)
return tree[node];
return merge(
query(l, mid, L, tl, tr),
query(mid + 1, r, R, tl, tr)
);
}
public:
SegmentTree(vector<ll> &a) {
ll n = (int) a.size();
sz = 1;
while (sz <= n) sz *= 2;
tree = vector<Node>(sz << 1);
build(0, sz - 1, 0, a);
}
SegmentTree(ll n) {
sz = 1;
while (sz < n) sz <<= 1;
tree = vector<Node>(sz << 1, Node(SKIP_VALUE));
}
void update(ll l, ll r, ll val) { // add value to range [l, r]
update(0, sz - 1, 0, l, r, val);
}
ll query(ll l, ll r) {
return query(0, sz - 1, 0, l, r).val;
}
#undef R
#undef L
#undef mid
};
#undef int
struct a {
ll x1, x2, y;
};
void solve() {
ll n, q;
cin >> n >> q;
vector<a> v(q);
for (ll i = 0; i < q; i++) {
cin >> v[i].x1 >> v[i].x2 >> v[i].y;
}
sort(all(v), [&](auto f, auto s) {
return f.y < s.y;
});
SegmentTree lazy(n);
lazy.update(0, n - 1, 1);
for (ll i = 0; i < q; i++) {
auto [x1, x2, y] = v[i];
x1--;
x2--;
if (x2 - x1 > 1) {
if (lazy.query(x1, x2) >= 1) {
lazy.update(x1 + 1, x2 - 1, 0);
lazy.update(x1, x1, 1);
lazy.update(x2, x2, 1);
}
}
}
cout << lazy.query(0, n - 1) << endl;
}
int main() {
Bustany();
ll t = 1;
cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSB1bGwgdW5zaWduZWQgbGwKI2RlZmluZSBsZCBsb25nIGRvdWJsZQp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIG11bHRpc2V0PGludD4gbWk7CnR5cGVkZWYgbXVsdGlzZXQ8bGw+IG1sbDsKdHlwZWRlZiB2ZWN0b3I8bGw+IHZsbDsKdHlwZWRlZiB2ZWN0b3I8Ym9vbD4gdmI7CnR5cGVkZWYgdmVjdG9yPHN0cmluZz4gdnM7CnR5cGVkZWYgc2V0PGxsPiBzbGw7CnR5cGVkZWYgdmVjdG9yPHZlY3RvcjxpbnQ+PiBfMnZpOwp0eXBlZGVmIHZlY3Rvcjx2ZWN0b3I8bGw+PiBfMnZsbDsKI2RlZmluZSBhbGwodikgKCh2KS5iZWdpbigpKSwgKCh2KS5lbmQoKSkKI2RlZmluZSBzeih2KSAoKGxsKSgodikuc2l6ZSgpKSkKCiNkZWZpbmUgdmlucCh2LCBuKSAgICAgICAgICAgICAgICBcCiAgICBmb3IgKHVsbCBpID0gMDsgaSA8IChuKTsgaSsrKSBcCiAgICBjaW4gPj4gKHYpW2ldCiNkZWZpbmUgcHJpbnR2KHYpICAgICAgXAogICAgZm9yIChhdXRvIGkgOiAodikpIFwKICAgIGNvdXQgPDwgaSA8PCAiICIKI2RlZmluZSBmcjAoaSwgbikgZm9yICh1bGwoaSkgPSAwOyAoaSkgPCAobik7IChpKSsrKQojZGVmaW5lIGZyMShpLCBuKSBmb3IgKHVsbChpKSA9IDE7IChpKSA8IChuKTsgKGkpKyspCiNkZWZpbmUgZnIoaSwgeCwgbikgZm9yICh1bGwoaSkgPSAoeCk7IChpKSA8IChuKTsgKGkpKyspCiNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklORwpjb25zdCBsbCBNT0QgPSAxMDAwMDAwMDA3OwoKdm9pZCBCdXN0YW55KCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgY291dC50aWUoTlVMTCk7CiNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCIuL2luLnR4dCIsICJyIiwgc3RkaW4pLCBmcmVvcGVuKCIuL291dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgp9Cgpjb25zdCBsbCBOID0gMWU1ICsgNTsKdmVjdG9yPHNsbD4gYWRqKE4pOwovL18ydmxsIGFkaihOLHZsbChOKSk7CnZiIHZpczsKI2RlZmluZSBpbnQgbGwKCnN0cnVjdCBGZW53aWNrVHJlZU9uZUJhc2VkSW5kZXhpbmcgewogICAgdmVjdG9yPGludD4gYml0OyAgLy8gYmluYXJ5IGluZGV4ZWQgdHJlZQogICAgaW50IG47CgogICAgRmVud2lja1RyZWVPbmVCYXNlZEluZGV4aW5nKGludCBuKSB7CiAgICAgICAgdGhpcy0+biA9IG4gKyAxOwogICAgICAgIGJpdC5hc3NpZ24obiArIDEsIDApOwogICAgfQoKLy8gICAgRmVud2lja1RyZWVPbmVCYXNlZEluZGV4aW5nKHZlY3RvcjxpbnQ+IGEpCi8vICAgICAgICAgICAgOiBGZW53aWNrVHJlZU9uZUJhc2VkSW5kZXhpbmcoYS5zaXplKCkpIHsKLy8vLyAgICAgICAgYml0LnJlc2l6ZShhLnNpemUoKSk7Ci8vLy8gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYS5zaXplKCk7IGkrKykKLy8vLyAgICAgICAgICAgIGFkZChpLCBhW2ldKTsKLy8gICAgfQoKICAgIGludCBzdW0oaW50IGlkeCkgewogICAgICAgIGludCByZXQgPSAwOwogICAgICAgIGZvciAoKytpZHg7IGlkeCA+IDA7IGlkeCAtPSBpZHggJiAtaWR4KQogICAgICAgICAgICByZXQgKz0gYml0W2lkeF07CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KCiAgICBpbnQgc3VtKGludCBsLCBpbnQgcikgewogICAgICAgIHJldHVybiBzdW0ocikgLSBzdW0obCAtIDEpOwogICAgfQoKICAgIHZvaWQgYWRkKGludCBpZHgsIGludCB2YWwpIHsKICAgICAgICBmb3IgKCsraWR4OyBpZHggPCBuOyBpZHggKz0gaWR4ICYgLWlkeCkKICAgICAgICAgICAgYml0W2lkeF0gKz0gdmFsOwogICAgfQoKICAgIHZvaWQgcmFuZ2VfYWRkKGludCBsLCBpbnQgciwgaW50IHZhbCkgewogICAgICAgIGFkZChsLCB2YWwpOwogICAgICAgIGFkZChyICsgMSwgLXZhbCk7CiAgICB9CgogICAgaW50IHBvaW50X3F1ZXJ5KGludCBpZHgpIHsKICAgICAgICBpbnQgcmV0ID0gMDsKICAgICAgICBmb3IgKCsraWR4OyBpZHggPiAwOyBpZHggLT0gaWR4ICYgLWlkeCkKICAgICAgICAgICAgcmV0ICs9IGJpdFtpZHhdOwogICAgICAgIHJldHVybiByZXQ7CiAgICB9Cn07CgojdW5kZWYgaW50CmxsIFNLSVBfVkFMVUUgPSAwOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCgpzdHJ1Y3QgTm9kZSB7CiAgICBpbnQgdmFsLCBsYXp5OwogICAgYm9vbCBpc0xhenk7CgogICAgTm9kZShpbnQgdmFsID0gU0tJUF9WQUxVRSwgaW50IGxhenkgPSAwLCBib29sIGlzTGF6eSA9IGZhbHNlKSA6IHZhbCh2YWwpLCBsYXp5KGxhenkpLCBpc0xhenkoaXNMYXp5KSB7fQp9OwoKY2xhc3MgU2VnbWVudFRyZWUgewpwcml2YXRlOgogICAgdmVjdG9yPE5vZGU+IHRyZWU7CiAgICBsbCBzejsKCiNkZWZpbmUgbWlkICgociArIGwpID4+IDEpCiNkZWZpbmUgTCBub2RlICogMiArIDEKI2RlZmluZSBSIG5vZGUgKiAyICsgMgoKICAgIE5vZGUgbWVyZ2UoTm9kZSBhLCBOb2RlIGIpIHsKICAgICAgICByZXR1cm4gTm9kZShhLnZhbCArIGIudmFsKTsKICAgIH0KCiAgICBOb2RlIGJ1aWxkKGxsIGwsIGxsIHIsIGxsIG5vZGUsIHZlY3RvcjxsbD4gJmEpIHsKICAgICAgICBpZiAobCA9PSByKSB7CiAgICAgICAgICAgIGlmIChsIDwgKGludCkgYS5zaXplKCkpIHJldHVybiAodHJlZVtub2RlXSA9IE5vZGUoYVtsXSkpOwogICAgICAgICAgICByZXR1cm4gTm9kZSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRyZWVbbm9kZV0gPSBtZXJnZShidWlsZChsLCBtaWQsIEwsIGEpLCBidWlsZChtaWQgKyAxLCByLCBSLCBhKSk7CiAgICB9CgogICAgLy8gYXBwbHkgbGF6eSBvbiB0aGUgbm9kZQogICAgdm9pZCBhcHBseShpbnQgbCwgaW50IHIsIGludCBub2RlKSB7CiAgICAgICAgdHJlZVtub2RlXS52YWwgPSAociAtIGwgKyAxKSAqIHRyZWVbbm9kZV0ubGF6eTsKICAgICAgICB0cmVlW25vZGVdLmxhenkgPSAwOwogICAgICAgIHRyZWVbbm9kZV0uaXNMYXp5ID0gMDsKICAgIH0KCiAgICAvLyBhZGQgdmFsIG9uIHRvIGxhenkgb2YgdGhlIG5vZGUKICAgIHZvaWQgcHVzaChpbnQgbm9kZSwgaW50IHZhbCkgewogICAgICAgIHRyZWVbbm9kZV0ubGF6eSA9IHZhbDsKICAgICAgICB0cmVlW25vZGVdLmlzTGF6eSA9IDE7CiAgICB9CgogICAgdm9pZCBwcm9wZWdhdGUobGwgbCwgbGwgciwgbGwgbm9kZSkgewogICAgICAgIGlmICghdHJlZVtub2RlXS5pc0xhenkpIHJldHVybjsKCiAgICAgICAgaWYgKGwgIT0gcikgewogICAgICAgICAgICBwdXNoKEwsIHRyZWVbbm9kZV0ubGF6eSk7CiAgICAgICAgICAgIHB1c2goUiwgdHJlZVtub2RlXS5sYXp5KTsKICAgICAgICB9CgogICAgICAgIGFwcGx5KGwsIHIsIG5vZGUpOwogICAgfQoKICAgIHZvaWQgdXBkYXRlKGxsIGwsIGxsIHIsIGxsIG5vZGUsIGxsIHRsLCBsbCB0ciwgbGwgdmFsKSB7CiAgICAgICAgcHJvcGVnYXRlKGwsIHIsIG5vZGUpOwoKICAgICAgICBpZiAobCA+IHRyIHx8IHIgPCB0bCkgcmV0dXJuOwoKICAgICAgICBpZiAobCA+PSB0bCAmJiByIDw9IHRyKSB7CiAgICAgICAgICAgIHB1c2gobm9kZSwgdmFsKTsKICAgICAgICAgICAgcHJvcGVnYXRlKGwsIHIsIG5vZGUpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB1cGRhdGUobCwgbWlkLCBMLCB0bCwgdHIsIHZhbCk7CiAgICAgICAgdXBkYXRlKG1pZCArIDEsIHIsIFIsIHRsLCB0ciwgdmFsKTsKCiAgICAgICAgdHJlZVtub2RlXSA9IG1lcmdlKHRyZWVbTF0sIHRyZWVbUl0pOwogICAgfQoKICAgIE5vZGUgcXVlcnkobGwgbCwgbGwgciwgbGwgbm9kZSwgbGwgdGwsIGxsIHRyKSB7CiAgICAgICAgcHJvcGVnYXRlKGwsIHIsIG5vZGUpOwoKICAgICAgICBpZiAodGwgPiByIHx8IHRyIDwgbCkgcmV0dXJuIE5vZGUoKTsKICAgICAgICBpZiAobCA+PSB0bCAmJiByIDw9IHRyKQogICAgICAgICAgICByZXR1cm4gdHJlZVtub2RlXTsKCiAgICAgICAgcmV0dXJuIG1lcmdlKAogICAgICAgICAgICAgICAgcXVlcnkobCwgbWlkLCBMLCB0bCwgdHIpLAogICAgICAgICAgICAgICAgcXVlcnkobWlkICsgMSwgciwgUiwgdGwsIHRyKQogICAgICAgICk7CiAgICB9CgpwdWJsaWM6CiAgICBTZWdtZW50VHJlZSh2ZWN0b3I8bGw+ICZhKSB7CiAgICAgICAgbGwgbiA9IChpbnQpIGEuc2l6ZSgpOwogICAgICAgIHN6ID0gMTsKICAgICAgICB3aGlsZSAoc3ogPD0gbikgc3ogKj0gMjsKCiAgICAgICAgdHJlZSA9IHZlY3RvcjxOb2RlPihzeiA8PCAxKTsKCiAgICAgICAgYnVpbGQoMCwgc3ogLSAxLCAwLCBhKTsKICAgIH0KCiAgICBTZWdtZW50VHJlZShsbCBuKSB7CiAgICAgICAgc3ogPSAxOwogICAgICAgIHdoaWxlIChzeiA8IG4pIHN6IDw8PSAxOwogICAgICAgIHRyZWUgPSB2ZWN0b3I8Tm9kZT4oc3ogPDwgMSwgTm9kZShTS0lQX1ZBTFVFKSk7CiAgICB9CgogICAgdm9pZCB1cGRhdGUobGwgbCwgbGwgciwgbGwgdmFsKSB7IC8vIGFkZCB2YWx1ZSB0byByYW5nZSBbbCwgcl0KICAgICAgICB1cGRhdGUoMCwgc3ogLSAxLCAwLCBsLCByLCB2YWwpOwogICAgfQoKICAgIGxsIHF1ZXJ5KGxsIGwsIGxsIHIpIHsKICAgICAgICByZXR1cm4gcXVlcnkoMCwgc3ogLSAxLCAwLCBsLCByKS52YWw7CiAgICB9CgojdW5kZWYgUgojdW5kZWYgTAojdW5kZWYgbWlkCn07CgojdW5kZWYgaW50CgoKc3RydWN0IGEgewogICAgbGwgeDEsIHgyLCB5Owp9OwoKCnZvaWQgc29sdmUoKSB7CiAgICBsbCBuLCBxOwogICAgY2luID4+IG4gPj4gcTsKICAgIHZlY3RvcjxhPiB2KHEpOwogICAgZm9yIChsbCBpID0gMDsgaSA8IHE7IGkrKykgewogICAgICAgIGNpbiA+PiB2W2ldLngxID4+IHZbaV0ueDIgPj4gdltpXS55OwogICAgfQogICAgc29ydChhbGwodiksIFsmXShhdXRvIGYsIGF1dG8gcykgewogICAgICAgIHJldHVybiBmLnkgPCBzLnk7CiAgICB9KTsKICAgIFNlZ21lbnRUcmVlIGxhenkobik7CiAgICBsYXp5LnVwZGF0ZSgwLCBuIC0gMSwgMSk7CiAgICBmb3IgKGxsIGkgPSAwOyBpIDwgcTsgaSsrKSB7CiAgICAgICAgYXV0byBbeDEsIHgyLCB5XSA9IHZbaV07CiAgICAgICAgeDEtLTsKICAgICAgICB4Mi0tOwogICAgICAgIGlmICh4MiAtIHgxID4gMSkgewogICAgICAgICAgICBpZiAobGF6eS5xdWVyeSh4MSwgeDIpID49IDEpIHsKICAgICAgICAgICAgICAgIGxhenkudXBkYXRlKHgxICsgMSwgeDIgLSAxLCAwKTsKICAgICAgICAgICAgICAgIGxhenkudXBkYXRlKHgxLCB4MSwgMSk7CiAgICAgICAgICAgICAgICBsYXp5LnVwZGF0ZSh4MiwgeDIsIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBsYXp5LnF1ZXJ5KDAsIG4gLSAxKSA8PCBlbmRsOwp9CgppbnQgbWFpbigpIHsKICAgIEJ1c3RhbnkoKTsKICAgIGxsIHQgPSAxOwogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==