program asfsdf;
var f,g:text;
n,i,m,s,x,y,st,sf,nr:longint;
a:array of array of longint;
viz,v,d:array of longint;
bufin,bufout:array[1..65000] of byte;
procedure dfs(nod:longint);
var k:longint;
begin
viz[nod]:=1;
for k:=1 to a[nod,0] do
begin
if viz[a[nod,k]]=0 then
begin
viz[a[nod,k]]:=1;
dfs(a[nod,k]);
end;
end;
end;
begin
assign(f,'dfs.in'); reset(f);
assign(g,'dfs.out'); rewrite(g);
settextbuf(f,bufin);
settextbuf(g,bufout);
readln(f,n,m);
setlength(a,n+1,1);
setlength(viz,n+1);
for i:=1 to m do
begin
readln(f,x,y);
setlength(a[x],length(a[x])+1);;
a[x,0]:=a[x,0]+1;
a[x,a[x,0]]:=y;
end;
for i:=1 to n do
if viz[i]=0 then
begin
nr:=nr+1;
dfs(i);
end;
write(g,nr);
close(f);
close(g);
end.