#include <string>
#include <iostream>
#include <algorithm>
#include <stack>
#include <deque>
#include <map>
#include <cstring>
#include <queue>
using namespace std;
const int N = 1000010;
int n, m, t;
struct edge{int v, w;};
int d[N], cnt[N], vis[N];
queue<int> q;
vector<edge> e[N];
bool spfa(int s)
{
memset(cnt, 0, sizeof cnt);
memset(vis, 0, sizeof vis);
memset(d, 0x3f, sizeof d);
while (!q.empty()) q.pop();
d[s] = 0, vis[s] = 1, q.push(s);
while (q.size())
{
int u = q.front();
q.pop();
vis[u] = 0;
int len = e[u].size();
for (int i = 0; i < len; i ++ )
{
int v = e[u][i].v, w = e[u][i].w;
if (d[v] > d[u] + w)
{
d[v] = d[u] + w;
cnt[v] = cnt[u] + 1;
if (cnt[v] >= n) return true;
if (!vis[v])
{
q.push(v);
vis[v] = 1;
}
}
}
}
return false;
}
int main()
{
scanf("%d", &t);
while (t -- )
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i ++ )
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (c >= 0)
{
e[a].push_back({b, c});
e[b].push_back({a, c});
}
else
{
e[a].push_back({b, c});
}
}
int f = spfa(1);
if (f) printf("Yes\n");
else printf("No\n");
for (int i = 0; i <= n; i ++ ) e[i].clear();
}
return 0;
}