#include<bits/stdc++.h>
using namespace std;
const int N=1000010;
int t,n,m;
int dist[N],cnt[N];
bool vis[N];
struct node
{
int b,w;
}e;
vector<node>g[N];
bool spfa()
{
queue<int>que;
for(int i=1;i<=n;i++)
{
vis[i]=true;
que.push(i);
}
while(!que.empty())
{
int now=que.front();
que.pop();
vis[now]=false;
for(int i=0;i<g[now].size();i++)
{
int v=g[now][i].b;
if(dist[v]>dist[now]+g[now][i].w)
{
dist[v]=dist[now]+g[now][i].w;
cnt[v]=cnt[now]+1;
if(cnt[v]>=n) return true;
if(!vis[v])
{
vis[v]=true;
que.push(v);
}
}
}
}
return false;
}
int main()
{
cin>>t;
while(t--)
{
memset(cnt,0,sizeof cnt);
memset(vis,false,sizeof vis);
memset(dist,0,sizeof dist);
cin>>n>>m;
for(int i=0;i<m;i++)
{
int a;
cin>>a>>e.b>>e.w;
g[a].push_back(e);
if(e.w>=0)
g[e.b].push_back({a,e.w});
}
if(spfa()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
for (int j=1;j<=n;j++)
g[j].clear();
}
return 0;
}