#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
int n,m,ans[2003],u,v,w;
bool vis[2003];
queue<int> q;
vector<pair<int,int> > g[2003];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; ++i)
g[i].clear();
for(int i=1; i<=m; ++i)
{
scanf("%d%d%d",&u,&v,&w);
if(w>0)
g[u].push_back(make_pair(v,w)),
g[v].push_back(make_pair(u,w));
if(w<0)
g[u].push_back(make_pair(v,w));
}
memset(ans,0x3f,sizeof(ans));
memset(vis,0,sizeof(ans));
ans[1]=0;
vis[1]=1;
q.push(1);
bool flag=0;
while(!q.empty())
{
if(flag) break;
u = q.front(); //RE在这了
q.pop();
vis[u]=0;
for(int i=0; i<g[u].size(); ++i)
{
v=g[u][i].first,w=g[u][i].second;
if(ans[u] + w < ans[v])
{
ans[v]=ans[u]+w;
if(ans[1] < 0) {
flag=1;
break;
}
if(!vis[v])
q.push(v),vis[v]=1;
}
}
}
if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}