#include<bits/stdc++.h>
#define cn getchar
using namespace std;
const int N = 3e6+5;
inline void read(int &x){
x = 0;int f1 = 1;char ch = cn();
while(!isdigit(ch)){if(ch == '-')f1 = -1;ch = cn();}
while(isdigit(ch)) x = x * 10 + ch - '0',ch = cn(); x*=f1;
}
inline int add(int a,int b){
if(a == 0x3f3f3f3f || b == 0x3f3f3f3f) return 0x3f3f3f3f;
return a+b;
}
struct E{
int u,v,w;
}e[N];
int T;
int dis[N];
int main(){
read(T);
while(T--){
memset(e,0,sizeof(e));
memset(dis,0x3f,sizeof(dis));
int n,m,k;
dis[1] = 0;
read(n);read(m);
for(register int i=k=0 ; i<m ; i++,k++){
int u,v,w;
read(u);read(v);read(w);
e[k] = (E){u,v,w};
if(w >= 0) e[++k] = (E){v,u,w};
}
bool f = false;
for(register int i=1 ; i<n ; i++){
f = true;
for(int j=0 ; j<k ; j++){
if(add(dis[e[j].u],e[j].w) < dis[e[j].v]){
f = true;
dis[e[j].v] = dis[e[j].u] + e[j].w;
}
}
if(f) break;
}
for(int j=0 ; j<k ; j++){
if(add(dis[e[j].u],e[j].w) < dis[e[j].v]){
goto YES;
}
}
puts("NO");
continue;
YES:puts("YES");
}
return 0;
}