#include<bits/stdc++.h>
using namespace std;
int d[1000005];
int n,m,k;
int T;
struct node {
int u,v,w,nxt;
} e[5000005];
int cnt,head[1000005],dis[1000005];
void add(int u,int v,int w) {
e[++cnt].u=u;
e[cnt].v=v;
e[cnt].w=w;
e[cnt].nxt=head[u];
head[u]=cnt;
}
bool f=0,vis[1000005];
queue<int>q;
int tot[1000005];
void spfa(int now) {
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
memset(tot,0,sizeof(tot));
q.push(now);
dis[now]=0;
vis[now]=1;
tot[now]=1;
while(!q.empty()) {
now=q.front();
q.pop();
vis[now]=0;
for(int i=head[now]; i; i=e[i].nxt) {
int v=e[i].v;
if(dis[v]>dis[now]+e[i].w) {
dis[v]=dis[now]+e[i].w;
if(!vis[v]) {
vis[v]=1;
tot[v]=tot[v]+1;
if(tot[v]>=n) {
f=1;
return;
}
q.push(v);
}
}
}
}
}
int read(){
int f=1,ans=0;
char ch=getchar();
if(ch=='-'){
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
ans=ans*10+ch-'0';
ch=getchar();
}
return ans*f;
}
int main() {
T=read();
while(T--) {
n=read();m=read();
while(!q.empty())q.pop();
f=0;
cnt=0;
memset(head,0,sizeof(head));
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
for(int i=1;i<=m;i++){
int u,v,w;
u=read();
v=read();
w=read();
if(w>=0){
add(u,v,w);
add(v,u,w);
}
else add(u,v,w);
}
for(int i=1; i<=n; i++) {
spfa(i);
if(f)break;
}
if(f) {
puts("YES");
} else puts("NO");
}
return 0;
}