#include <iostream>
#include<vector>
using namespace std;
#include<vector>
using namespace std;
vector<int>r[2000];
int connect[2000][2000];
int N;
int check(int start,int neighbor,int visit[])
{
int connect[2000][2000];
int N;
int check(int start,int neighbor,int visit[])
{
int i;
visit[neighbor]=1;
connect[start][neighbor]=connect[neighbor][start]=1;
for(i=0;i<r[neighbor].size();i++)
{
if(visit[r[neighbor][i]]==0)
check(start,r[neighbor][i],visit);
}
return 0;
}
visit[neighbor]=1;
connect[start][neighbor]=connect[neighbor][start]=1;
for(i=0;i<r[neighbor].size();i++)
{
if(visit[r[neighbor][i]]==0)
check(start,r[neighbor][i],visit);
}
return 0;
}
int main()
{
int i,j,K,m,n;
int total=0;
int visit[3000];
memset(connect,0,sizeof(connect));
cin>>N>>K;
for(i=0;i<K;i++)
{
cin>>m>>n;
r[m].push_back(n);
}
for(i=1;i<=N;i++)
{
memset(visit,0,sizeof(visit));
check(i,i,visit);
}
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
if(connect[i][j]==0)
break;
}
if(j==N+1)
total++;
}
cout<<total;
return 0;
}
{
int i,j,K,m,n;
int total=0;
int visit[3000];
memset(connect,0,sizeof(connect));
cin>>N>>K;
for(i=0;i<K;i++)
{
cin>>m>>n;
r[m].push_back(n);
}
for(i=1;i<=N;i++)
{
memset(visit,0,sizeof(visit));
check(i,i,visit);
}
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
if(connect[i][j]==0)
break;
}
if(j==N+1)
total++;
}
cout<<total;
return 0;
}