#include using namespace std; const int sz = 2020202; #define next next_ int node[sz], next[sz], to[sz], w[sz], e; void ins(int x, int y, int v) {e++; next[e] = node[x]; node[x] = e; to[e] = y; w[e] = v;} int N, Q, ans; int vis[sz], parity[sz]; void dfs(int x) { vis[x] = 1; for (int j = node[x]; j; j = next[j]) if (!vis[to[j]]) { parity[to[j]] = parity[x] ^ w[j]; dfs(to[j]); } else if (parity[to[j]] ^ parity[x] ^ w[j]) ans = 0; } void clr() { for (int i = 1; i <= N; i++) node[i] = vis[i] = parity[i] = 0; for (int i = 1; i <= e; i++) next[i] = to[i] = w[i] = 0; e = 0; ans = 1; } void doit() { int i, j, v; clr(); scanf("%d %d", &N, &Q); while (Q--) { scanf("%d %d %d", &i, &j, &v); ins(i, j, v); ins(j, i, v); } for (i = 1; i <= N; i++) if (!vis[i]) dfs(i); printf(ans ? "yes\n" : "no\n"); } int main() {int T; scanf("%d", &T); while (T--) doit(); return 0;}