#include<bits/stdc++.h>
using namespace std;
#define ll long long
// map<int,vector<int>>adj;
vector<int>adj[1000001];
int cc_cnt = 0;
// map<int,bool>vis;
int vis[1000001];
// vector<int>cc(1000001,0);
int cc[1000001];
// int find(int a,int par[]){
// if(par[a]<0)
// return a;
// return par[a] = find(par[a],par);
// }
// void unionset(int a,int b,int par[]){
// int para = find(a,par);
// int parb = find(b,par);
// if(para!=parb){
// par[para]+=par[parb];
// par[parb] = para;
// }
// }
void dfs(int x){
vis[x] = 1;
cc[x] = cc_cnt;
for(int neigh:adj[x])
if(vis[neigh]==0)
dfs(neigh);
}
int main(){
int t;
cin>>t;
while(t--){
// adj.clear();
int n,k;
cin>>n>>k;
int flag = 1;
vector<pair<int,int>>queries;
for(int i=0;i<=n;i++){
vis[i] = 0;
adj[i].clear();
}
for(int i =0;i<=n;i++)
cc[i] = 0;
cc_cnt =0;
while(k--){
int x1,x2;
string op;
cin>>x1>>op>>x2;
if(op=="="){
adj[x1].push_back(x2);
adj[x2].push_back(x1);
}
else
queries.push_back({x1,x2});
}
for(int i = 1;i<=n;i++){
if(vis[i]==0){
cc_cnt++;
dfs(i);
}
}
for(int i =0;i<queries.size();i++){
int a = queries[i].first;
int b = queries[i].second;
if(cc[a]==cc[b]){
flag = 0;
break;
}
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZyAKCi8vIG1hcDxpbnQsdmVjdG9yPGludD4+YWRqOwp2ZWN0b3I8aW50PmFkalsxMDAwMDAxXTsKaW50IGNjX2NudCA9IDA7Ci8vIG1hcDxpbnQsYm9vbD52aXM7CmludCB2aXNbMTAwMDAwMV07Ci8vIHZlY3RvcjxpbnQ+Y2MoMTAwMDAwMSwwKTsKaW50IGNjWzEwMDAwMDFdOwovLyBpbnQgZmluZChpbnQgYSxpbnQgcGFyW10pewovLyAJaWYocGFyW2FdPDApCi8vIAkJcmV0dXJuIGE7Ci8vIAlyZXR1cm4gcGFyW2FdID0gZmluZChwYXJbYV0scGFyKTsKLy8gfQovLyB2b2lkIHVuaW9uc2V0KGludCBhLGludCBiLGludCBwYXJbXSl7Ci8vIAlpbnQgcGFyYSA9IGZpbmQoYSxwYXIpOwovLyAJaW50IHBhcmIgPSBmaW5kKGIscGFyKTsKLy8gCWlmKHBhcmEhPXBhcmIpewovLyAJCXBhcltwYXJhXSs9cGFyW3BhcmJdOwovLyAJCXBhcltwYXJiXSA9IHBhcmE7Ci8vIAl9Ci8vIH0KCnZvaWQgZGZzKGludCB4KXsKCXZpc1t4XSA9IDE7CgljY1t4XSA9IGNjX2NudDsKCWZvcihpbnQgbmVpZ2g6YWRqW3hdKQoJCWlmKHZpc1tuZWlnaF09PTApCgkJCWRmcyhuZWlnaCk7CgkKfQoKaW50IG1haW4oKXsKCWludCB0OwoJY2luPj50OwoJd2hpbGUodC0tKXsKCQkvLyBhZGouY2xlYXIoKTsKCQlpbnQgbixrOwoJCWNpbj4+bj4+azsKCQlpbnQgZmxhZyA9IDE7CgkJdmVjdG9yPHBhaXI8aW50LGludD4+cXVlcmllczsJCQkKCQlmb3IoaW50IGk9MDtpPD1uO2krKyl7CgkJCXZpc1tpXSA9IDA7CgkJCWFkaltpXS5jbGVhcigpOwoJCQl9CgkJZm9yKGludCBpID0wO2k8PW47aSsrKQoJCQljY1tpXSA9IDA7CgkJY2NfY250ID0wOwoJCXdoaWxlKGstLSl7CgkJCWludCB4MSx4MjsKCQkJc3RyaW5nIG9wOwoJCQljaW4+PngxPj5vcD4+eDI7CgkJCWlmKG9wPT0iPSIpewoJCQkJYWRqW3gxXS5wdXNoX2JhY2soeDIpOwoJCQkJYWRqW3gyXS5wdXNoX2JhY2soeDEpOwoJCQl9CgkJCWVsc2UKCQkJCXF1ZXJpZXMucHVzaF9iYWNrKHt4MSx4Mn0pOwoJCX0KCQkKCQlmb3IoaW50IGkgPSAxO2k8PW47aSsrKXsKCQkJaWYodmlzW2ldPT0wKXsKCQkJCWNjX2NudCsrOwoJCQkJZGZzKGkpOwoJCQl9CgkJfQoJCWZvcihpbnQgaSA9MDtpPHF1ZXJpZXMuc2l6ZSgpO2krKyl7CgkJCWludCBhID0gcXVlcmllc1tpXS5maXJzdDsKCQkJaW50IGIgPSBxdWVyaWVzW2ldLnNlY29uZDsKCQkJIAoJCQlpZihjY1thXT09Y2NbYl0pewoJCQkJZmxhZyA9IDA7CgkJCQlicmVhazsKCQkJCX0KCQl9CgkJCgkJaWYoZmxhZykKCQkJY291dDw8IllFUyI8PGVuZGw7CgkJZWxzZQoJCQljb3V0PDwiTk8iPDxlbmRsOwoJCQoKCX0KCn0=