n, m = gets.split.map(&:to_i)

edge = Array.new(n+1) {[]} 

m.times do
    x, y, z = gets.split.map(&:to_i)
    edge[x] << y
    edge[y] << x
end

c = Array.new(n+1)
ans = 0
1.upto(n) do |i|
    next if c[i]
    ans += 1
    c[i] = 1
    que = [i]

    while now = que.shift
        edge[now].each do |y|
            next if c[y]
            c[y] = 1
            que << y
        end
    end
end

p ans