#include<bits/stdc++.h>
using namespace std;
const int INF = 2147483647, N = 2e3 + 5;
int n, m, u, v, w, dis[N];
bool flag;
vector<pair<int, int> > adja[N];
int main()
{
int t;
scanf("%d", &t);
for(int test = 0; test < t; test++) {
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) {
adja[i].clear();
dis[i] = INF;
}
for(int i = 0; i < m; i++) {
scanf("%d%d%d", &u, &v, &w);
if(w >= 0)
adja[v].push_back(make_pair(u, w));
adja[u].push_back(make_pair(v, w));
}
dis[1] = 0;
for(size_t i = 0; i < adja[1].size(); i++) {
dis[adja[1][i].first] = min(dis[adja[1][i].first], adja[1][i].second);
}
for(int time = 0; time < n; time++) {
for(int i = 1; i <= n; i++) {
for(size_t j = 0; j < adja[i].size(); j++) {
if(adja[i][j].second + dis[i] < dis[adja[i][j].first] && (dis[i] != INF || dis[adja[i][j].first] != INF)) {
dis[adja[i][j].first] = adja[i][j].second + dis[i];
}
}
}
}
flag = false;
for(int i = 1; i <= n; i++) {
for(size_t j = 0; j < adja[i].size(); j++) {
if(adja[i][j].second + dis[i] < dis[adja[i][j].first] && (dis[i] != INF || dis[adja[i][j].first] != INF)) {
flag = true;
break;
}
}
if(flag) break;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}