#include<bits/stdc++.h>
using namespace std;
const int MAXN=10015;
struct edge {
int x,y,w,nxt;
} E[MAXN<<2];
int head[MAXN],dis[MAXN],cnt[MAXN],inq[MAXN];
int n,m,tot;
inline void addedge(int x,int y,int w) {
E[++tot]=(edge) {x,y,w,head[x]};
head[x]=tot;
}
queue<int>Q;
inline int SPFA(int s) {
while(!Q.empty()) Q.pop();
Q.push(s);
inq[s]=1;
dis[s]=0;
while(!Q.empty()) {
int now=Q.front();
Q.pop();
inq[now]=0;
for(int i=head[now]; ~i; i=E[i].nxt) {
int to=E[i].y;
if(dis[to]>dis[now]+E[i].w) {
dis[to]=dis[now]+E[i].w;
if(!inq[to]) {
inq[to]=1;
Q.push(to);
++cnt[to];
if(cnt[to]>=n)
return 1;
}
}
}
}
return 0;
}
int main() {
int T;
cin>>T;
while(T--) {
memset(head,-1,sizeof(head));
tot=0;
cin>>n>>m;
for(int i=1,x,y,z; i<=m; i++) {
cin>>x>>y>>z;
if(z>=0){
addedge(x,y,z);
addedge(y,x,z);
}
else addedge(x,y,z);
}
memset(dis,0x3f,sizeof(dis));
memset(cnt,0,sizeof(cnt));
memset(inq,0,sizeof(inq));
int fl=1;
for(int i=1; i<=n; ++i) {
if(dis[i]==0x3f3f3f3f) {
if(SPFA(i)) {
puts("YES");
fl=0;
break;
}
}
}
if(fl) puts("NO");
}
return 0;
}