#include<bits/stdc++.h>
using namespace std;
const int MAXN=10005;
struct Edge{
int v,val;
};
vector<Edge> a[MAXN];
int n,m,s,cnt[MAXN],dis[MAXN],t;
bool vis[MAXN];
queue<int> q;
bool spfa(){
for(int i=1;i<=n;i++){
dis[i]=INT_MAX;
cnt[i]=0;
}
dis[s]=0;
vis[s]=true;
q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=false;
for(int i=0;i<a[u].size();i++){
int v=a[u][i].v,val=a[u][i].val;
if(dis[v]>dis[u]+val){
dis[v]=dis[u]+val;
cnt[v]=cnt[u]+1;
if(cnt[v]>=n)
return false;
if(!vis[v]){
q.push(v);
vis[v]=true;
}
}
}
}
return true;
}
int main(){
s=1;
scanf("%d",&t);
for(int p=1;p<=t;p++){
while(!q.empty())
q.pop();
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
a[i].clear();
for(int i=1;i<=m;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
Edge t;
if(w>=0){
t.v=v;
t.val=w;
a[u].push_back(t);
t.v=u;
a[v].push_back(t);
}
else{
t.v=v;
t.val=w;
a[u].push_back(t);
}
}
bool yes=spfa();
if(yes)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}