#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
queue<int> q;
int p,t,cnt,s,check,h[6005],dis[2005],u[2005],m[2005];
struct q{
int t;
int n;
int z;
}b[6005];
void add(int x,int y,int w){
b[++cnt].t=y,b[cnt].z=w,b[cnt].n=h[x],h[x]=cnt;
}
void spfa(int qd){
while(!q.empty()) q.pop();
for(int i=1;i<=p;i++) dis[i]=0x7fffffff,u[i]=0,m[i]=0;
q.push(qd);
dis[qd]=0,u[qd]=1;
while(!q.empty()){
int c=q.front();
if(check) return;
q.pop();
u[c]=0,m[c]++;
for(int i=h[c];i;i=b[i].n){
int v=b[i].t;
if(dis[v]>dis[c]+b[i].z){
dis[v]=dis[c]+b[i].z;
if(!u[v]){
q.push(v);
u[v]=1;
}
if(m[v]>p) check=1;
}
}
}
}
int main(){
cin>>t;
for(int j=1;j<=t;j++){
memset(h,0,sizeof(h));
memset(b,0,sizeof(b));
int m,m2;
check=0,cnt=0;
cin>>p>>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);
}
spfa(1);
if(check) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}