n, m = map(int, input().split())
g_cena = [[] for _ in range(n)]
g = [[] for _ in range(n)]
for _ in range(m):
    u,v, w = map(int, input().split())
    g_cena[u].append((v, w))
    g_cena[v].append((u, w))
    g[u].append(v)
    g[v].append(u)

def dfs (g, start, visited):
     stack = [start]
     visited.add(start)
     while stack:
         v = stack.pop()
         for u in g[v]:
             if u not in visited:
                 visited.add(u)
                 stack.append(u)

visited = set()
components = 0
for v in range(0, len(g)):
    if v not in visited:
        components += 1
        dfs(g, v, visited)

count_0 = 0
count_1 = 0

for i in range(len(g_cena)):
    for j in range(2):
        if g_cena[i][j][1] == 0:
            count_0 += 1
        else:
            count_1 += 1

if len(visited) == m:
    if count_1 / 2 == m or count_0 / 2 == m or ((count_1 / 2 >= 2) and (count_0 / 2 >= 2)):
        print('YES')
    else:
        print('NO')
