#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<fstream>
#include<map>
#include<ctime>
#include<set>
#include<queue>
#include<cmath>
#include<vector>
#include<bitset>
#include<functional>
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define REP(i,l,r) for((i)=(l);(i)<=(r);++(i))
#define REP2(i,l,r) for((i)=(l);(i)!=(r);++(i))
using namespace std;
typedef long long LL;
typedef double ld;
const int MAX=100000+10;
int T;
int n,m;
int t[MAX],person[MAX],sum[MAX];
int l[MAX],r[MAX],Del[MAX],Add[MAX],num[MAX],fugai[MAX];
int next[MAX];
int check(int T)
{
int i;
REP(i,1,n)
{
l[i]=m+1;
r[i]=0;
}
REP(i,1,m)
num[i]=-1;
REP(i,1,T)
{
if(num[t[i]]!=-1 && num[t[i]]!=sum[i]+1)
return 0;
num[t[i]]=sum[i]+1;
int u=person[i];
if(l[u]>t[i])
l[u]=t[i];
if(r[u]<t[i])
r[u]=t[i];
}
int be=-1;
for(i=m;i>=1;--i)
if(num[i]!=-1)
{
next[i]=be;
be=i;
Add[i]=Del[i]=0;
fugai[i]=0;
}
int have=0;
REP(i,1,n)
{
if(r[i]==0)
continue;
++have;
int L=l[i];
int R=r[i];
fugai[L]+=1;
if(L!=be)
Del[L]++;
if(next[R]!=-1)
{
fugai[next[R]]--;
Add[next[R]]++;
}
}
int last=0,lasta=0,ans=0;
int ss=0;
REP(i,1,m)
{
if(num[i]==-1)
continue;
ss+=fugai[i];
int x=Del[i];
int y=Add[i];
ans-=x+y;
int now=num[i]-ss;
if(now<0)
return 0;
int tmp=min(x,last);
x-=tmp;
last-=tmp;
if(x>0)
ans+=x;
lasta+=y;
int diff=last+lasta-now;
ans+=abs(diff);
if(diff>0)
{
int tmp=min(diff,lasta);
lasta-=tmp;
diff-=tmp;
last-=diff;
}
else
last+=-diff;
}
ans+=last+lasta;
return ans/2<=n-have;
}
int Test;
int Main()
{
int i;
scanf("%d%d",&n,&m);
REP(i,1,m)
scanf("%d%d%d",&t[i],&person[i],&sum[i]);
int left=1,right=m;
// if(Test!=1)
// return 0;
// printf("%d %d\n",n,m);
// REP(i,1,m)
// printf("%d %d %d\n",t[i],person[i],sum[i]);
while(left<right)
{
int mid=(left+right+1)/2;
if(check(mid))
left=mid;
else right=mid-1;
}
printf("%d\n",left);
return 0;
}
int main()
{
#ifndef ONLINE_JUDGE
// freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#endif
scanf("%d",&T);
REP(Test,1,T)
Main();
return 0;
}
I2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxjc3RkbGliPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxmc3RyZWFtPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPGN0aW1lPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxjbWF0aD4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxiaXRzZXQ+CiNpbmNsdWRlPGZ1bmN0aW9uYWw+CiNkZWZpbmUgeCBmaXJzdAojZGVmaW5lIHkgc2Vjb25kCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgUkVQKGksbCxyKSBmb3IoKGkpPShsKTsoaSk8PShyKTsrKyhpKSkKI2RlZmluZSBSRVAyKGksbCxyKSBmb3IoKGkpPShsKTsoaSkhPShyKTsrKyhpKSkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIExMOwp0eXBlZGVmIGRvdWJsZSBsZDsKCmNvbnN0IGludCBNQVg9MTAwMDAwKzEwOwppbnQgVDsKCmludCBuLG07CmludCB0W01BWF0scGVyc29uW01BWF0sc3VtW01BWF07CgppbnQgbFtNQVhdLHJbTUFYXSxEZWxbTUFYXSxBZGRbTUFYXSxudW1bTUFYXSxmdWdhaVtNQVhdOwppbnQgbmV4dFtNQVhdOwoKaW50IGNoZWNrKGludCBUKQp7CiAgICBpbnQgaTsKICAgIFJFUChpLDEsbikKICAgIHsKICAgICAgICBsW2ldPW0rMTsKICAgICAgICByW2ldPTA7CiAgICB9CiAgICBSRVAoaSwxLG0pCiAgICAgICAgbnVtW2ldPS0xOwogICAgUkVQKGksMSxUKQogICAgewogICAgICAgIGlmKG51bVt0W2ldXSE9LTEgJiYgbnVtW3RbaV1dIT1zdW1baV0rMSkKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgbnVtW3RbaV1dPXN1bVtpXSsxOwoKICAgICAgICBpbnQgdT1wZXJzb25baV07CiAgICAgICAgaWYobFt1XT50W2ldKQogICAgICAgICAgICBsW3VdPXRbaV07CiAgICAgICAgaWYoclt1XTx0W2ldKQogICAgICAgICAgICByW3VdPXRbaV07CiAgICB9CgogICAgaW50IGJlPS0xOwogICAgZm9yKGk9bTtpPj0xOy0taSkKICAgICAgICBpZihudW1baV0hPS0xKQogICAgICAgIHsKICAgICAgICAgICAgbmV4dFtpXT1iZTsKICAgICAgICAgICAgYmU9aTsKICAgICAgICAgICAgQWRkW2ldPURlbFtpXT0wOwogICAgICAgICAgICBmdWdhaVtpXT0wOwogICAgICAgIH0KCiAgICBpbnQgaGF2ZT0wOwogICAgUkVQKGksMSxuKQogICAgewogICAgICAgIGlmKHJbaV09PTApCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICsraGF2ZTsKICAgICAgICBpbnQgTD1sW2ldOwogICAgICAgIGludCBSPXJbaV07CiAgICAgICAgZnVnYWlbTF0rPTE7CiAgICAgICAgaWYoTCE9YmUpCiAgICAgICAgICAgIERlbFtMXSsrOwoKICAgICAgICBpZihuZXh0W1JdIT0tMSkKICAgICAgICB7CiAgICAgICAgICAgIGZ1Z2FpW25leHRbUl1dLS07CiAgICAgICAgICAgIEFkZFtuZXh0W1JdXSsrOwogICAgICAgIH0KICAgIH0KCiAgICBpbnQgbGFzdD0wLGxhc3RhPTAsYW5zPTA7CiAgICBpbnQgc3M9MDsKICAgIFJFUChpLDEsbSkKICAgIHsKICAgICAgICBpZihudW1baV09PS0xKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICBzcys9ZnVnYWlbaV07CiAgICAgICAgaW50IHg9RGVsW2ldOwogICAgICAgIGludCB5PUFkZFtpXTsKICAgICAgICBhbnMtPXgreTsKICAgICAgICBpbnQgbm93PW51bVtpXS1zczsKICAgICAgICBpZihub3c8MCkKICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgIGludCB0bXA9bWluKHgsbGFzdCk7CiAgICAgICAgeC09dG1wOwogICAgICAgIGxhc3QtPXRtcDsKICAgICAgICBpZih4PjApCiAgICAgICAgICAgIGFucys9eDsKCiAgICAgICAgbGFzdGErPXk7CiAgICAgICAgaW50IGRpZmY9bGFzdCtsYXN0YS1ub3c7CiAgICAgICAgYW5zKz1hYnMoZGlmZik7CiAgICAgICAgaWYoZGlmZj4wKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHRtcD1taW4oZGlmZixsYXN0YSk7CiAgICAgICAgICAgIGxhc3RhLT10bXA7CiAgICAgICAgICAgIGRpZmYtPXRtcDsKICAgICAgICAgICAgbGFzdC09ZGlmZjsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICBsYXN0Kz0tZGlmZjsKICAgIH0KICAgIGFucys9bGFzdCtsYXN0YTsKICAgIHJldHVybiBhbnMvMjw9bi1oYXZlOwp9CgppbnQgVGVzdDsKCmludCBNYWluKCkKewogICAgaW50IGk7CiAgICBzY2FuZigiJWQlZCIsJm4sJm0pOwogICAgUkVQKGksMSxtKQogICAgICAgIHNjYW5mKCIlZCVkJWQiLCZ0W2ldLCZwZXJzb25baV0sJnN1bVtpXSk7CiAgICBpbnQgbGVmdD0xLHJpZ2h0PW07Ci8vICAgIGlmKFRlc3QhPTEpCi8vICAgICAgICByZXR1cm4gMDsKLy8gICAgcHJpbnRmKCIlZCAlZFxuIixuLG0pOwovLyAgICBSRVAoaSwxLG0pCi8vICAgICAgICBwcmludGYoIiVkICVkICVkXG4iLHRbaV0scGVyc29uW2ldLHN1bVtpXSk7CiAgICB3aGlsZShsZWZ0PHJpZ2h0KQogICAgewogICAgICAgIGludCBtaWQ9KGxlZnQrcmlnaHQrMSkvMjsKICAgICAgICBpZihjaGVjayhtaWQpKQogICAgICAgICAgICBsZWZ0PW1pZDsKICAgICAgICBlbHNlIHJpZ2h0PW1pZC0xOwogICAgfQogICAgcHJpbnRmKCIlZFxuIixsZWZ0KTsKICAgIHJldHVybiAwOwp9CgppbnQgbWFpbigpCnsKI2lmbmRlZiBPTkxJTkVfSlVER0UKLy8gICAgZnJlb3BlbigiaW5wdXQudHh0IiwiciIsc3RkaW4pO2ZyZW9wZW4oIm91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwojZW5kaWYKICAgIHNjYW5mKCIlZCIsJlQpOwogICAgUkVQKFRlc3QsMSxUKQogICAgICAgIE1haW4oKTsKICAgIHJldHVybiAwOwp9Cg==