using namespace std;
const int N=1000001;
int hd[N],ver[N],val[N],nxt[N],idx;
int n,m,dis[N],s,vis[N];
void add(int x,int y,int v){
ver[++idx]=y;
val[idx]=v;
nxt[idx]=hd[x];
hd[x]=idx;
}
bool Bellman(){
memset(dis,0,sizeof(dis));
dis[1]=0;
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=hd[i];i;i=nxt[j]){
if(dis[i]==0x3f3f3f3f)continue;
int y=ver[j];
if(dis[y]>dis[i]+val[j]){
dis[y]=dis[i]+val[j];
if(k==n)return true;
}
}
}
}
return false;
}
int main(){
int t;
cin>>t;
while(t--){
memset(ver,0,sizeof(ver));
memset(nxt,0,sizeof(nxt));
memset(val,0,sizeof(val));
memset(hd,0,sizeof(hd));
idx=0;
cin>>n>>m;
int x,y,v;
while(m--){
cin>>x>>y>>v;
if(v>=0){
add(x,y,v),add(y,x,v);
}
else{
add(x,y,v);
}
}
if(Bellman())cout<<"YES/n";
else cout<<"NO/n";
}
return 0;
}