#include<bits/stdc++.h>
using namespace std;
struct edge{
long long f,t,w;
};
long long t,n,m,x,y,z,inf=0xffffffff,d[6005];
edge a[6005];
int main()
{
cin>>t;
for(long long i=1;i<=t;i++)
{
long long k=0;
cin>>n>>m;
for(long long j=0;j<m;j++)
{
cin>>x>>y>>z;
if(z>=0)
{
a[k++]={x,y,z};
a[k++]={y,x,z};
}
else
a[k++]={x,y,z};
}
for(long long j=0;j<=n;j++)
d[j]=inf;
d[1]=0;
for(long long j=1;j<n;j++)
for(long long j=0;j<k;j++)
d[a[j].t]=min(d[a[j].t],d[a[j].f]+a[j].w);
bool f=false;
for(long long j=0;j<k;j++)
{
if(d[a[j].t]>d[a[j].f]+a[j].w)
f=true;
}
if(f) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}