#include<bits/stdc++.h>
#define int long long
using namespace std;
struct Node{
int to,next,dis;
}edge[114514];
int head[114514],tot,d[114514];
bool vis[114514];
int cnt[114514];
queue<int>q;
void add(int u,int v,int dis){
edge[++tot].to=v,edge[tot].dis=dis;
edge[tot].next=head[u],head[u]=tot;
}
int n,m;
void init(){
memset(head,0,sizeof(head));
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
for(int i=1;i<=tot;i++){
edge[i].dis=0,edge[i].to=0,edge[i].next=0;
}
tot=0;
}
void spfa(int s){
memset(d,0x3f,sizeof(d));
d[s]=0;
q.push(s);
vis[s]=1;
while(!q.empty()){
int u=q.front();
vis[u]=0;
q.pop();
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].to,dis=edge[i].dis;
if(d[u]+dis<=d[v]){
cnt[v]=cnt[u]+1;
if(cnt[v]>=n){
cout<<"YES"<<endl;
return;
}
if(!vis[v]){
q.push(v);
vis[v]=1;
}
d[v]=d[u]+dis;
}
}
}
cout<<"NO"<<endl;
}
signed main(){
int t;
cin>>t;
while(t--){
init();
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v,dis;
cin>>u>>v>>dis;
add(u,v,dis);
if(dis>=0){
add(v,u,dis);
}
}
spfa(1);
}
return 0;
}