#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include<vector>
using namespace std;
const int inf=0x3f3f3f3f;
const int N=2010,M=6010;
int n,m;
int to[M],ne[M],w[M];
int d[N],cnt[N],vis[N];
struct node{
int v1;
int w1;
};
vector<node>e[N];
void add(int a,int b,int c){
e[a].push_back((node){b,c});
}
bool spfa(){
memset(d,0x3f,sizeof d);
memset(vis,0,sizeof vis);
memset(cnt,0,sizeof cnt);
queue<int>q;
q.push(1); vis[1]=1; d[1]=0;
while(q.size()){
int u=q.front();q.pop();vis[u]=0;
for(auto i:e[u]){
int v=i.v1;
if(d[v]>d[u]+i.w1){
d[v]=d[u]+i.w1;
cnt[v]=cnt[u]+1;
if(cnt[v]>=n)return 1;
if(!vis[v])q.push(v),vis[v]=1;
}
}
}
return 0;
}
int main(){
int T; scanf("%d",&T);
while(T--){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
if(w>=0)add(v,u,w);;
}
if(spfa())cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}