//#include <stdio.h>
//int sum, a[100][2];
//int map[100][100];
//int i, j, p;
//void com(int x, int y){
// map[y][x]=0;
// map[x][y]=0;
// sum++;
// for(i=x; i<p; i++){
// if(map[y][i]==1) com(y,)
// }
//}
//#include<stdio.h>
//int map[105][105] = {0};
//int visit[105] = {0};
//
//int i, j, x, y, n, k;
//
//void findItem(int q, int f) {
// if(q > f) {
// return;
// }
// for(int xi=1; xi<=n; xi++) {
// if(map[q][xi] == 1) {
// visit[xi] = 1;
// map[q][xi] = 0;
// map[xi][q] = 0;
// findItem(xi, f);
// }
// }
//}
//
//int main()
//{
// scanf("%d", &n);
// scanf("%d", &k);
//
// for(i=0; i<k; i++)
// {
// scanf("%d %d", &x, &y);
// map[x][y] = 1;
// map[y][x] = 1;
// }
//
// for(i=1; i<=n; i++)
// {
// for(j=1; j<=n; j++)
// {
// printf("%d ", map[i][j]);
// }
// printf("\n");
// }
//
// findItem(1, n);
//
// int s = 0;
// for(i=1; i<=n; i++) {
// s += visit[i];
// }
// printf("%d", s);
//
//}
#include <stdio.h>
int high[505][505]={0};
int map[505][505]={0};
int i, j, n, k, sum;
void find(int f, int q){
int e;
for(e=1; e<=n; e++){
if(map[q][e]==1){
high[f][e]=1;
find(f, e);
}
}
}
int main(){
int x, y, cnt;
scanf("%d", &n);
scanf("%d", &k);
for(i=0; i<k; i++){
scanf("%d %d", &x, &y);
map[x][y]=1;
}
for(i=1; i<=n; i++){ //여기 3중 반복문 없애기
find(i, i);
}
// for(i=1; i<=n; i++){
// for(j=1; j<=n; j++){
// printf("%d ", high[i][j]);
// }
// printf("\n");
// }
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
cnt+=high[i][j]+high[j][i];
}
if(cnt==n-1){
sum++;
}
cnt=0;
}
printf("%d", sum);
}