#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define no cout<<"NO\n";
#define yes cout<<"YES\n";
#define A cout<<"Alice\n";
#define B cout<<"Bob\n";
#define cll(x) cout<<(x)<<endl;
#define ccl(x) cout<<(x)<<" ";
#define range(a) (a).begin()+1,(a).end()
#define fall(a) for(auto i:(a))cout<<i<<" ";cout<<"\n";
#define homo 1145141919810
#define _max *max_element
#define _min *min_element
#define man int main()
#define whatcanisay ll t;cin>>t;while(t--)solve();
#define manbaout return 0;
#define rep(i,a,b) for(ll i=(a);i<=(b);i++)
#define lep(i,a,b) for(ll i=(a);i>=(b);i--)
#define endl "\n"
using ll=long long;
using ld=long double;
using ull=unsigned long long;
using plst=pair<ll,string>;
using pll=pair<ll,ll>;
ll n,m,k;
//ll fa[114514];
ll gcd(ll a,ll b){return !b?a:gcd(b,a%b);}
//const int N=214514;
const int inf=1e9;
const ll mod=998244353;
ll lcm(ll a,ll b){return a*b/gcd(a,b);}
const ull base=131;
const ll N=2e5+5;
using i64=long long;
i64 fact[N];
i64 ksm(i64 a, i64 b) {
i64 r = 1;
while (b > 0) {
if (b & 1) r = (r * a) % mod;
b /= 2;
a = (a * a) % mod;
}
return r;
}
i64 C(i64 n, i64 k) {
if (n < k) return 0LL;
return (fact[n] * ksm((fact[n - k] * fact[k]) % mod, mod - 2)) % mod;
}
void solve(){
ll n,m;cin>>n>>m;
vector<pll>ve[n+1];
priority_queue<pll>qq;
vector<ll>dist(n+1,inf);
vector<ll>cnt(n+1);
rep(i,1,m){
ll u,v,w;cin>>u>>v>>w;
ve[u].push_back({v,w});
if(w>=0)ve[v].push_back({u,w});
}
ll flag=0;
auto dj=[&](ll x)->void{
while(qq.size())qq.pop();
vector<ll>vis(n+1);
dist[x]=0;
vis[x]=1;
qq.push({0,x});//存距离和点的编号
cnt[x]++;
while(qq.size()){
ll u=qq.top().y;
qq.pop();
vis[u]=0;
for(auto s:ve[u]){//遍历u连接的所有点
ll v=s.x,w=s.y;
if(dist[v]>dist[u]+w){
dist[v]=dist[u]+w;
if(++cnt[v]>=n){
flag=1;
return;
}
if(!vis[v]){
qq.push({-dist[v],v});
vis[v]=1;
}
}
}
}
};
dj(1);
cll(flag?"YES":"NO")
}
man{
ios::sync_with_stdio(false);
std::cin.tie(nullptr);
// fact[0] = 1;
// rep(i,1,N - 1) fact[i] = (fact[i - 1] * i) % mod;
ll t;cin>>t;
while(t--)
solve();
}