#include <bits/stdc++.h>
#define lli int
#define endl "\n"
#define MAX 1000005
using namespace std;
vector <lli> visited(MAX, -1);
int counter;
void DFS(lli i, vector < vector<lli> > v1)
{
visited[i] = counter;
for(int j = 0; j<v1[i].size(); j++)
if(visited[v1[i][j]] == -1)
DFS(v1[i][j], v1);
}
int main()
{
lli t;
cin>>t;
ios_base::sync_with_stdio(false);
cin.tie(NULL);
while(t--)
{
lli n, k, num1, num2;
cin>>n>>k;
vector < vector<lli> > v1(n+1);
vector <pair <lli, lli> > notequal;
string s;
for(lli i = 0; i<k; i++)
{
cin>>num1>>s>>num2;
if(s[0] == '=')
{
v1[num1].push_back(num2);
v1[num2].push_back(num1);
}
else {
notequal.push_back({num1, num2});
}
}
for(lli i =0 ;i <=n; i++)
visited[i] = -1;
counter = 0;
for(lli i =1; i<=n; i++)
{
if(v1[i].size() > 0)
{
if(visited[i] == -1)
{
counter++;
DFS(i, v1);
}
}
}
bool ans = true;
for(auto c: notequal)
if((visited[c.first] == visited[c.second]) && (visited[c.first] != -1))
{
ans = false;
break;
}
if(ans)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGxpIGludAojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIE1BWCAxMDAwMDA1CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3IgPGxsaT4gdmlzaXRlZChNQVgsIC0xKTsKaW50IGNvdW50ZXI7Cgp2b2lkIERGUyhsbGkgaSwgdmVjdG9yIDwgdmVjdG9yPGxsaT4gPiB2MSkKewoJdmlzaXRlZFtpXSA9IGNvdW50ZXI7Cglmb3IoaW50IGogPSAwOyBqPHYxW2ldLnNpemUoKTsgaisrKQoJCWlmKHZpc2l0ZWRbdjFbaV1bal1dID09IC0xKQoJCQlERlModjFbaV1bal0sIHYxKTsKfQoKaW50IG1haW4oKQp7CglsbGkgdDsKCWNpbj4+dDsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJY2luLnRpZShOVUxMKTsKCXdoaWxlKHQtLSkKCXsKCQlsbGkgbiwgaywgbnVtMSwgbnVtMjsKCQljaW4+Pm4+Pms7CgkJdmVjdG9yIDwgdmVjdG9yPGxsaT4gPiB2MShuKzEpOwoJCXZlY3RvciA8cGFpciA8bGxpLCBsbGk+ID4gbm90ZXF1YWw7CgkJc3RyaW5nIHM7CgkJZm9yKGxsaSBpID0gMDsgaTxrOyBpKyspCgkJewkKCQkJY2luPj5udW0xPj5zPj5udW0yOwoJCQlpZihzWzBdID09ICc9JykKCQkJewoJCQkJdjFbbnVtMV0ucHVzaF9iYWNrKG51bTIpOwoJCQkJdjFbbnVtMl0ucHVzaF9iYWNrKG51bTEpOwoJCQl9CgkJCWVsc2UgewoJCQkJbm90ZXF1YWwucHVzaF9iYWNrKHtudW0xLCBudW0yfSk7CgkJCX0KCQl9CgoJCWZvcihsbGkgaSA9MCA7aSA8PW47IGkrKykKCQkJdmlzaXRlZFtpXSA9IC0xOwoJCWNvdW50ZXIgPSAwOwoJCWZvcihsbGkgaSA9MTsgaTw9bjsgaSsrKQoJCXsKCQkJaWYodjFbaV0uc2l6ZSgpID4gMCkKCQkJewoJCQkJaWYodmlzaXRlZFtpXSA9PSAtMSkKCQkJCXsKCQkJCQljb3VudGVyKys7CgkJCQkJREZTKGksIHYxKTsKCQkJCX0KCQkJfQoJCX0KCQlib29sIGFucyA9IHRydWU7CgkJZm9yKGF1dG8gYzogbm90ZXF1YWwpCgkJCWlmKCh2aXNpdGVkW2MuZmlyc3RdID09IHZpc2l0ZWRbYy5zZWNvbmRdKSAmJiAodmlzaXRlZFtjLmZpcnN0XSAhPSAtMSkpCgkJCXsKCQkJCWFucyA9IGZhbHNlOwoJCQkJYnJlYWs7CgkJCX0KCQlpZihhbnMpCgkJCWNvdXQ8PCJZRVMiPDxlbmRsOwoJCWVsc2UKCQkJY291dDw8Ik5PIjw8ZW5kbDsKCX0KfQo=