#include <fstream>
using namespace std;
ifstream in("dfs.in");
ofstream out("dfs.out");
const int N=100001, M=200001;
int n,mu;
int vf[2*M], urm[2*M], lst[N], m, bif[N];
void adauga(int x, int y)
{
vf[++m] = y;
urm[m] = lst[x];
lst[x] = m;
}
void parcurg(int x){
int p = lst[x], y;
while (p != 0)
{
y = vf[p];
//prelucrez y
bif[y]=1;
p = urm[p];
}
}
/*
{1,3}, {1,4}, {1,2}, {2,3}
lst = (5, 7, 8, 4)
vf = (3,1,4,1,2,1,3,2)
urm = (0,0,1,0,3,0,6,2)
*/
int main()
{
int i,nr=1,x,y;
in>>n>>mu;
for(i=1;i<=mu;i++){
in>>x>>y;
adauga(x,y);
}
bif[1]=1;
parcurg(1);
for(i=1;i<=n;i++){
//out<<bif[i]<<" ";
if(bif[i]==0){
nr++;
parcurg(i);
}
}
out<<nr;
return 0;
}