#include <bits/stdc++.h>
#define eggy_ using
#define party namespace
#define eggy 99999999
eggy_ party std;
int N,I,i,j,k,n,m,t1,t2,t3,e[2001][2001],dis[2001];
bool fns;
struct que
{
int dt[500002],h = 1,t = 1,ck[2001];
bool b[2001];
void ps(int a)
{
if (!b[a])
{
b[a] = 1;
dt[t++] = a;
ck[a]++;
}
}
void pp()
{
b[dt[h]] = 0;
h++;
}
void init()
{
h = 1;
t = 1;
for (i = 1; i <= n ; i++)
{
ck[i] = 0;
b[i] = 0;
dt[i] = 0;
}
}
};
struct que q;
int main()
{
scanf("%d",&N);
for (I = 1; I <= N; I++)
{
scanf("%d%d",&n,&m);
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
e[i][j] = ((i == j) ? 0 : eggy);
for (i = 1; i <= m; i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
if (t3 >= 0)
{
e[t1][t2] = min(e[t1][t2],t3);
e[t2][t1] = min(e[t2][t1],t3);
}
else e[t1][t2] = min(e[t1][t2],t3);
}
fns = 0;
q.init();
q.ps(1);
for (i = 1; i <= n; i++)
{
dis[i] = eggy;
}dis[1] = 0;
while (q.h != q.t)
{
for (i = 1; i <= n; i++)
{
if(dis[i] > dis[q.dt[q.h]] + e[q.dt[q.h]][i])
{
dis[i] = dis[q.dt[q.h]] + e[q.dt[q.h]][i];
q.ps(i);
if (q.ck[i] >= n)
{
printf("YES\n");
fns = 1;
break;
}
if (fns) break;
}
}
if (fns) break;
q.pp();
}
if (fns) continue;
printf("NO\n");
}
return 0;
}