#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=4e3+5;
int t;
int n,m;
int tot;
int edge[N],ver[N],Next[N],head[N];
int vis[N],cnt[N],d[N];
inline int read(){
int f=1,k=0;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
k=k*10+c-'0';
c=getchar();
}
return f*k;
}
void add(int x,int y,int z){
edge[++tot]=z; ver[tot]=y; Next[tot]=head[x]; head[x]=tot;
}
void spfa(){
queue<int>q;
memset(d,0x3f,sizeof(d));
d[1]=0;
vis[1]=1;
q.push(1);
while(!q.empty()){
int x=q.front();
q.pop();
vis[x]=0;
for(int i=head[x];i;i=Next[i]){
int y=ver[i];
int z=edge[i];
if(d[y]>d[x]+z){
d[y]=d[x]+z;
if(!vis[y]){
q.push(y); vis[y]=1;
cnt[y]=cnt[x]+1;
if(cnt[y]>=n){
cout<<"YES"<<endl;
return;
}
}
}
}
}
cout<<"NO"<<endl;
}
signed main(){
t=read();
while(t--){
memset(head,0,sizeof(head));
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
tot=0;
n=read(),m=read();
for(int i=1;i<=m;i++){
int x=read(),y=read(),z=read();
if(z<0) add(x,y,z);
else add(x,y,z),add(y,x,z);
}
spfa();
}
return 0;
}