#include<bits/stdc++.h>
using namespace std;
const int INF = 0x7f7f7f7;
const int N = 2e5+10;
struct edge{
int v,w;
};
vector<edge>a[N];
int n,m;
int dis[N],vis[N],in[N],cnt[N];
queue<int>q;
bool SPFA(){
for(int i=1;i<=n;i++){
dis[i] = INF;vis[i] = 0;vis[i] =0 ;cnt[i]=0;
}
dis[1]=0;vis[1]=1;cnt[1]=1;
q.push(1);
while(!q.empty()){
int u = q.front();
q.pop();
vis[u] = 0;
for(int j=0;j<=a[u].size()-1;j++){
edge ed = a[u][j];
int v =ed.v,w=ed.w;
if(dis[v]>dis[u]+w){
dis[v] = dis[u] + w;
if(!vis[v]){
cnt[v] = cnt[v]+1;
vis[v]=1;
if(cnt[v]>=n){
return 0;
}
q.push(v);
}
}
}
}
return 1;
}
int main(){
int n1;
int g1,g2,g3;edge g4;
freopen("P3385_1.in","r",stdin);
freopen("P3385_1.out","w",stdout);
cin>>n1;
while(n1--){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&g1,&g2,&g3);
g4.v=g2;g4.w=g3;
a[g1].push_back(g4);
}
cout<<(SPFA()?"NO":"YES")<<endl;
for(int i=1;i<=n;i++){
a[i].clear();
}
}
return 0;
}