#include<bits/stdc++.h>
using namespace std;
#define ll long long
vector<int>adj[1000001];
// vector<int>cc(1000001,0);
int cc[1000001];
int cc_cnt;
bool vis[1000001];
void dfs(int x){
vis[x] = true;
cc[x] = cc_cnt;
for(int neigh:adj[x])
if(!vis[neigh])
{dfs(neigh);}
}
int main(){
int t;
cin>>t;
ios_base::sync_with_stdio(false);
cin.tie(NULL);
while(t--){
int n,k;
cin>>n>>k;
bool flag = 1;
vector<pair<int,int>>queries;
for(int i=0;i<=n;i++){
vis[i] = 0;
adj[i].clear();
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 = false;
break;
}
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZyAKdmVjdG9yPGludD5hZGpbMTAwMDAwMV07Ci8vIHZlY3RvcjxpbnQ+Y2MoMTAwMDAwMSwwKTsKaW50IGNjWzEwMDAwMDFdOwppbnQgY2NfY250Owpib29sIHZpc1sxMDAwMDAxXTsKdm9pZCBkZnMoaW50IHgpewoJdmlzW3hdID0gdHJ1ZTsKCWNjW3hdID0gY2NfY250OwoJZm9yKGludCBuZWlnaDphZGpbeF0pCgkJaWYoIXZpc1tuZWlnaF0pCgkJCXtkZnMobmVpZ2gpO30KfQoKaW50IG1haW4oKXsKCWludCB0OwoJY2luPj50OwoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgljaW4udGllKE5VTEwpOwoJd2hpbGUodC0tKXsKCQlpbnQgbixrOwoJCWNpbj4+bj4+azsKCQlib29sIGZsYWcgPSAxOwoJCXZlY3RvcjxwYWlyPGludCxpbnQ+PnF1ZXJpZXM7CQkJCgkJZm9yKGludCBpPTA7aTw9bjtpKyspewoJCQl2aXNbaV0gPSAwOwoJCQlhZGpbaV0uY2xlYXIoKTsKICAgICAgICAgICAgY2NbaV09MDsKCQkJfQoJCWNjX2NudCA9MDsKCQl3aGlsZShrLS0pewoJCQlpbnQgeDEseDI7CgkJCXN0cmluZyBvcDsKCQkJY2luPj54MT4+b3A+PngyOwoJCQlpZihvcD09Ij0iKXsKCQkJCWFkalt4MV0ucHVzaF9iYWNrKHgyKTsKCQkJCWFkalt4Ml0ucHVzaF9iYWNrKHgxKTsKCQkJfQoJCQllbHNlCgkJCQlxdWVyaWVzLnB1c2hfYmFjayh7eDEseDJ9KTsKCQl9CgkJCgkJZm9yKGludCBpID0gMTtpPD1uO2krKyl7CgkJCWlmKHZpc1tpXT09MCl7CgkJCQljY19jbnQrKzsKCQkJCWRmcyhpKTsKCQkJfQoJCX0KCQlmb3IoaW50IGkgPTA7aTxxdWVyaWVzLnNpemUoKTtpKyspewoJCQlpbnQgYSA9IHF1ZXJpZXNbaV0uZmlyc3Q7CgkJCWludCBiID0gcXVlcmllc1tpXS5zZWNvbmQ7CgkJCSAKCQkJaWYoY2NbYV09PWNjW2JdKXsKCQkJCWZsYWcgPSBmYWxzZTsKCQkJCWJyZWFrOwoJCQkJfQoJCX0KCQkKCQlpZihmbGFnKQoJCQljb3V0PDwiWUVTIjw8ZW5kbDsKCQllbHNlCgkJCWNvdXQ8PCJOTyI8PGVuZGw7CgkJCgoJfQoKfQ==