N,M = gets.split.map(&:to_i)

UF = [-1]*(N+1)
F = lambda{|a|
	next UF[a]<0 ? a : UF[a]=F[UF[a]]
}
U = lambda{|ab|
	a,b = ab.split.map(&:to_i).map(&F)
	a,b = b,a unless UF[a]<UF[b]
	UF[a] += UF[b]
	UF[b] = a
}
$<.each(&U)

p UF.count{|g| g<0 }-2
