#include<bits/stdc++.h>
#define il inline
#define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
using namespace std;
const int N=50005,inf=23333333;
int n,m;
const int maxn=N;
struct node{
int v,nxt,w;
}edge[maxn<<1];
int head[maxn],tot,dis[maxn];
bool vis[N];
il int rd(){int ttt;scanf("%d",&ttt);return ttt;}
void add(int x,int y,int w){edge[++tot]=(node){y,head[x],w};head[x]=tot;}
queue<int>q;
int mi=inf;
int cnt[maxn];
#define mem(a,b) memset(a,b,sizeof(a))
il bool spfa(int x){
mem(vis,0);mem(cnt,0);
mem(dis,0x3f);
while(!q.empty())q.pop();
q.push(x);dis[x]=0;
vis[x]=1;cnt[x]=1;
while(!q.empty()){
int x=q.front();q.pop();
vis[x]=0;
for(int i=head[x];i;i=edge[i].nxt){
int y=edge[i].v;
if(dis[y]>dis[x]+edge[i].w){
dis[y]=dis[x]+edge[i].w;
if(dis[y]<n*mi){return 1;}
cnt[y]+=1;
if(cnt[y]>n){return 1;}
if(!vis[y]){
vis[y]=1;
q.push(y);
//if(cnt[y]>=n){cout<<'s';return 0;}
if(q.size()>3*(n+m))return 1;
// if(!)
}
}
}
}
return 0;
}
int main(){
#ifdef swt
freopen("input2.txt","r",stdin);
#endif // swt
int T=rd();
while(T--){
n=rd(),m=rd();
#define en '\n'
mem(head,0);tot=0;
int f,a,b,c;
mi=inf;
while(m--){
a=rd(),b=rd(),c=rd();
if(c<0)add(a,b,c);
else add(a,b,c),add(b,a,c);
mi=min(mi,c);
}
if(!spfa(1))cout<<"N0"<<en;
else cout<<"YE5"<<en;
}
return 0;
}