#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct node{
int y, z;
};
int n, m, dis[N], cnt[N];
bool flag, vis[N];
vector<node>g[N];
queue<int>q;
void solve() {
bool flag = true;
cin >> n;
cin >> m;
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, w});
}
memset(dis, 0x3f, sizeof(dis));
memset(vis, 0 , sizeof(vis));
memset(cnt, 0, sizeof(cnt));
dis[1] = 0;
vis[1] = true;
q.push(1);
while(q.size()) {
int x = q.front();
vis[x] = false;
q.pop();
for (auto k:g[x]) {
int y = k.y, z = k.z;
if(dis[x] + z < dis[y]) {
dis[y] = dis[x] + z;
cnt[y] ++;
if(cnt[y] >= n){
cout << "YES" << endl;
flag = false;
return;
}
if(!vis[y])q.push(y), vis[y] = true;
}
}
}
if(flag)cout << "NO" << endl;
}
int main() {
int _;
cin >>_;
while(_--) {
solve();
}
return 0;
}