{
TASK:school
LANG:PASCAL
}
program school;
var
  graph:array[1..500,1..500] of boolean;
  added:array[1..500] of boolean;
  a,b,i,n,m,ans:integer;
procedure DFS(num:integer);
var
  i:integer;
begin
 added[num]:=true;
 for i:=1 to n do
  if (graph[num,i]) and (not added[i]) then
   DFS(i);
end;
begin
   readln(n,m);
   for i:=1 to m do
   begin
    read(a,b);
    graph[a,b]:=true;
    graph[b,a]:=true;
   end;
   ans:=0;
   for i:=1 to n do
    if not added[i] then
    begin
     DFS(i);
     inc(ans);
    end;
   writeln(ans);
   readln
end.