#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e3+10;
struct node{
int v,w;
};
bool operator<(node x,node y){
return x.w<y.w;
}
vector<node> g[N];
const int INF=1e18;
int vis[N],lc[N],dis[N];
int n,m;
int spfa(){
for(int i=1;i<=n;i++){
dis[i]=INF;
lc[i]=0;
vis[i]=0;
}
deque<node> q;
q.push_back({1,0});
dis[1]=0;
vis[1]=1;
while(!q.empty()){
if(rand()%1000==1){
sort(q.begin(),q.end());
}
int u=q.front().v;
q.pop_front();
vis[u]=0;
if(lc[u]>=n+1){
return 1;
}
for(int i=0;i<g[u].size();i++){
int v=g[u][i].v;
int w=g[u][i].w;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
if(!vis[v]){
vis[v]=1;
lc[v]++;
if(!q.empty()&&dis[v]>dis[q.front().v]){
q.push_back({v,dis[v]});
}
else{
q.push_front({v,dis[v]});
}
}
}
}
}
return 0;
}
void so(){
cin>>n>>m;
for(int i=0;i<=n;i++){
g[i].clear();
}
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
if(w>=0){
g[u].push_back({v,w});
g[v].push_back({u,w});
}
else{
g[u].push_back({v,w});
}
}
cout<<(spfa()?"YES":"NO")<<'\n';
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
for(int i=1;i<=t;i++){
so();
}
return 0;
}