#include<bits/stdc++.h>
using namespace std;
int t,n,m;
int tot,head[20002],ver[100002],nex[100002],edge[100002];
void add(int x,int y,int z){
nex[++tot]=head[x];
ver[tot]=y;
edge[tot]=z;
head[x]=tot;
}
int cnt[20002],dis[20002];
bool vis[20002];
queue<int> q;
bool spfa(){
memset(dis,0x3f,sizeof dis);
memset(cnt,0,sizeof cnt);
memset(vis,0,sizeof vis);
while(!q.empty())q.pop();
q.push(1),dis[1]=0,vis[1]=1,cnt[1]=1;
while(!q.empty()){
int x=q.front();
q.pop(),vis[x]=0;
for(int i=head[x];i;i=nex[i]){
int y=ver[i],z=edge[i];
if(dis[x]+z<dis[y]){
dis[y]=dis[x]+z;
cnt[y]=cnt[x]+1;
if(cnt[y]>=n)
return 0;
if(!vis[y]){
vis[y]=1;
q.push(y);
}
}
}
}
return 1;
}
signed main(){
cin>>t;
while(t--){
cin>>n>>m;
memset(head,0,sizeof head),tot=0;
memset(ver,0,sizeof ver);
memset(nex,0,sizeof nex);
memset(edge,0,sizeof edge);
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
add(u,v,w);
if(w>=0)add(v,u,w);
}
if(!spfa())cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}