#include<iostream>
#include<cstring>
#define maxn 20001
#define maxm 40001
#define inf 0x3f3f3f3f
using namespace std;
int dis[maxn],head[maxn],tot,n,m;
struct E{
int to,nxt,w;
}edge[maxm];
void add(int u,int v,int w){
tot++;
edge[tot].to=v,edge[tot].w=w,edge[tot].nxt=head[u];
head[u]=tot;
}
bool bellman_ford(int s){
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
for(int i=1;i<n;i++){
for(int j=1;j<=n;j++){
if(dis[j]==inf)continue;
for(int k=head[j];k;k=edge[k].nxt){
if(edge[k].w!=inf&&dis[edge[k].to]>dis[j]+edge[k].w)dis[edge[k].to]=dis[j]+edge[k].w;
}
}
}
for(int j=1;j<=n;j++){
for(int k=head[j];k;k=edge[k].nxt){
if(dis[j]==inf||dis[edge[k].to]==inf)continue;
if(edge[k].w!=inf&&dis[edge[k].to]>dis[j]+edge[k].w)return 1;
}
}
return 0;
}
signed main(){
//freopen("P3385_9.in","r",stdin);
ios::sync_with_stdio(0);
int t;
cin>>t;
while(t--){
memset(head,0,sizeof(head));
tot=0;
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
if(w>0)add(v,u,w);
}
if(bellman_ford(1))cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
orz