#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
{
w=-1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int w;
int n,m;
vector <int> a[1005];
vector <int> b[1005];
int vis[1005],dis[1005],cnt[1005];
bool spfa(int c)
{
queue <int> q;
fill(dis,dis+n+1,-1e9);
q.push(c);
vis[c]=1;
dis[c]=0;
cnt[c]++;
while(!q.empty())
{
int x=q.front();
q.pop();
vis[x]=0;
cnt[x]++;
for(int i=0;i<(int)a[x].size();i++)
{
int y=a[x][i];
if(dis[y]<dis[x]+b[x][i])
{
dis[y]=dis[x]+b[x][i];
if(vis[y]==0)
{
vis[y]=1;
q.push(y);
if(cnt[y]==n)
{
return 0;
}
}
}
}
}
return 1;
}
int main()
{
w=read();
while(w--)
{
n=read(),m=read();
for(int i=1;i<=m;i++)
{
int s=read(),t=read(),v=read();
a[s-1].push_back(t);
b[s-1].push_back(-v);
a[t].push_back(s-1);
b[t].push_back(v);
}
fill(vis,vis+n+1,0);
fill(cnt,cnt+n+1,0);
int flag=0;
for(int i=0;i<=n;i++)
{
if(cnt[i]==0)
{
if(!spfa(i))
{
flag=1;
break;
}
}
}
if(flag==0)
{
cout<<"true"<<endl;
}
else cout<<"false"<<endl;
}
return 0;
}