
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
struct edge{
int st,to,v;
}a[520005];
int fa[520005];
int f[500]={1,1};
int n,m;
bool cmp(edge a,edge b){
return a.v<b.v;
}
bool cmp1(edge a,edge b){
return a.v>b.v;
}
int find(int x){
while(x!=fa[x])x=fa[x]=fa[fa[x]];
return x;
}
int work(){
int ed=0,ans=0;
for(int now=1;now<=m;now++){
int u=find(a[now].st),w=find(a[now].to);
if(u==w){
continue;
}
fa[u]=w;
ed++;
ans+=a[now].v;
if(ed==n-1){
return ans;
}
}
}
signed main(){
int t;
cin>>t;
while(t--){
int s=0;
cin>>n>>m;
for(int i=1;i<=n;i++){
fa[i]=i;
}
for(int i=1;i<=m;i++){
cin>>a[i].st>>a[i].to>>a[i].v;
}
sort(a+1,a+m+1,cmp);
int down=work();
for(int i=1;i<=n;i++){
fa[i]=i;
}
sort(a+1,a+m+1,cmp1);
int up=work();
int i=3;
while(f[i]<50000){
f[i]=f[i-1]+f[i-2];
i++;
}
for(int j=1;j<i;j++){
if(f[j]>=down and f[j]<=up){
s=1;
}
}
if(s==1) cout<<"YES";
else cout<<"NO";
cout<<endl;
}
return 0;
}