#include<bits/stdc++.h>
using namespace std;
struct node{
int v,w,next;
}edges[30001];
int head[20001],d[20001],t,n,m,u,v,w,cnt;
bool vis[20001],flag;
inline void add_edge(int u,int v,int w){
edges[++cnt]=(node){v,w,head[u]};
head[u]=cnt;
}
inline int read(){
int x=0;
bool f=0;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<3)+(x<<1)+(ch^'0');
ch=getchar();
}
return f?~x+1:x;
}
void dfs_spfa(int u){
if(flag)return;
vis[u]=1;
for(int i=head[u];i;i=edges[i].next){
int v=edges[i].v;
if(d[u]+edges[i].w<d[v]){
d[v]=d[u]+edges[i].w;
if(vis[v]){
flag=1;
return;
}else dfs_spfa(v);
}
}
vis[u]=0;
}
int main(){
t=read();
while(t--){
n=read(),m=read();
memset(d,0x3f,sizeof(d));
memset(vis,0,sizeof(vis));
memset(head,0,sizeof(head));
cnt=0;
flag=0;
d[1]=0;
while(m--){
u=read();v=read();w=read();
add_edge(u,v,w);
if(w>=0)add_edge(v,u,w);
}
dfs_spfa(1);
if(flag)printf("YES\n");
else printf("NO\n");
}
return 0;
}