#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
const int INF=0x3f3f3f3f;
int dis[2005][2005],mindis[2005];
vector<int>ans[2005];
int T,m,n;
inline int add(int a,int b){
if(a==0x3f3f3f3f||b==0x3f3f3f3f)return 0x3f3f3f3f;
else return a+b;
}
bool bellman(int s){
fill(mindis,mindis+2001,INF);
mindis[s]=0;
for(int i=0;i<n-1;i++){
for(int j=1;j<=n;j++){
for(int each:ans[j]){
if(add(mindis[j],dis[j][each])<mindis[each]){
mindis[each]=add(mindis[j],dis[j][each]);
}
}
}
}
for(int j=1;j<=n;j++){
for(int each:ans[j]){
if(add(mindis[j],dis[j][each])<mindis[each]){
mindis[each]=add(mindis[j],dis[j][each]);
return true;
}
}
}
return false;
}
int main(){
int u,v,w;
cin>>T;
while(T--){
for(int i=1;i<=2000;i++){
for(int j=1;j<=2000;j++){
dis[i][j]=dis[j][i]=INF;
}
}
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>u>>v>>w;
if(w>=0){
dis[u][v]=dis[v][u]=w;
ans[u].push_back(v);
ans[v].push_back(u);
}
else{
dis[u][v]=w;
ans[u].push_back(v);
}
}
if(bellman(1)){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
}