#include<bits/stdc++.h>
using namespace std;
const int N=2000005;
int t;
int dis[N],n,m,cnt[N];
bool inQueue[N];
queue<int> Q;
vector<pair<int,int> > edges[N];
void SPFA(){
memset(cnt,0,sizeof(cnt));
memset(dis,0x3f,sizeof(dis));
dis[1]=0;
Q.push(1);
inQueue[1]=true;
while(!Q.empty()){
int x=Q.front();
Q.pop();
inQueue[x]=false;
for(auto edge:edges[x]){
if(dis[edge.first]<=dis[x]+edge.second)
continue;
dis[edge.first]=dis[x]+edge.second;
if(!inQueue[edge.first]){
if(++cnt[edge.first]>=n){
cout<<"YES"<<endl;
return;
}
Q.push(edge.first);
inQueue[edge.first]=true;
}
}
}
cout<<"NO"<<endl;
}
int main()
{
cin>>t;
for(int i=1;i<=t;i++){
cin>>n>>m;
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
if(w>=0){
edges[u].emplace_back(v,w);
edges[v].emplace_back(u,w);
}
else{
edges[u].emplace_back(v,w);
}
}
SPFA();
}
return 0;
}