class Edge:
    a = 0
    b = 0
    c = 0

    def __init__(self, _a, _b, _c):
        self.a = _a
        self.b = _b
        self.c = _c

class Node:
    edges = []
    visited = False
    idx = 0

n, m = [int(x) for x in input().split()]
nodes = [Node()]*n
for i in range(len(nodes)):
    nodes[i].idx = i

stack = []

def traverse(node):
    if (node.visited):
        r, b = 0, 0
        i = len(stack)-1
        lastNode = node
        while True:
            newNode = stack[i]
            i -= 1
            for e in lastNode.edges:
                if not (e.b == newNode.idx):
                    continue;
                if (e.c == 0):
                    b += 1
                else:
                    r += 1
            lastNode = stack[i+1]
            if (newNode.idx == node.idx):
                if (r == 1 or b == 1):
                    print("NO")
                    exit()
                else:
                    return

    node.visited = True
    stack.append(node)

    for e in node.edges:
        traverse(nodes[e.b])

    stack.pop(-1)
    visited = False

for i in range(m):
    a, b, c = [int(x) for x in input().split()]
    nodes[a].edges.append(Edge(a, b, c))
    nodes[b].edges.append(Edge(b, a, c))

for node in nodes:
    if not node.visited:
        traverse(node)

print("YES")
