/*
#include <stdio.h>
int map[102][102] = { 0 };
int map2[102][102] = { 0 };
int n;
int num = 0, region=0, tmp=0;
void count(int x, int y)
{
if (map[x][y] == 0) return;
num++;
map[x][y] = 0;
//printf("%d %d : %d\n", x, y, num);
if (map[x - 1][y] != 0)
{
count(x - 1, y);
}
if (map[x + 1][y] != 0)
{
count(x + 1, y);
}
if (map[x][y - 1] != 0)
{
count(x, y - 1);
}
if (map[x][y + 1] != 0)
{
count(x, y + 1);
}
}
int main()
{
int region = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
scanf("%d", &map[i][j]);
map2[i][j] = map[i][j];
}
}
for (int k = 1; k < 100; k++)
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
map[i][j] = map2[i][j];
if (map[i][j] < k)
{
map[i][j] = 0;
}
}
}
tmp = 0;
for (int a = 1; a <= n; a++)
{
for (int b = 1; b <= n; b++)
{
num = 0;
count(a, b);
if (num >= 1)
{
tmp++;
}
}
}
//printf("%d %d\n", tmp, region);
if (tmp > region)
{
region = tmp;
}
}
printf("%d", region);
}
*/
/*
#include <stdio.h>
int height[200000][2] = { 0 };
int map[501][501] = { 0 };
int map2[501][501] = { 0 };
int visit[501] = { 0 };
int count = 0, sum = 0;
int n, m;
void count1(int k)
{
for (int i = 1; i <= n; i++)
{
if (map[k][i] == 1)
{
map[k][i] = 0;
visit[i] = 1;
//printf("%d -> %d \n", k, i);
count1(i);
}
}
}
void count2(int k)
{
for (int i = 1; i <= n; i++)
{
if (map[i][k] == 1)
{
map[i][k] = 0;
visit[i] = 1;
//printf("%d -> %d \n", k, i);
count2(i);
}
}
}
int main()
{
scanf("%d", &n);
scanf("%d", &m);
for (int i = 0; i < m; i++)
{
scanf("%d %d", &height[i][0], &height[i][1]);
map[height[i][0]][height[i][1]] = 1;
map2[height[i][0]][height[i][1]] = 1;
}
for (int i = 1; i <= n; i++)
{
//printf("travel %d\n", i);
count1(i);
count2(i);
for (int j = 1; j <= n; j++)
{
sum += visit[j];
//printf("visit[%d]: %d\n", j, visit[j]);
visit[j] = 0;
}
//printf("sum : %d\n");
if (sum == n-1)
{
count++;
}
for (int j = 1; j <= n; j++)
{
for (int k = 1; k <= n; k++)
{
map[j][k] = map2[j][k];
}
}
sum = 0;
}
printf("%d", count);
}
*/
//#include <stdio.h>
//
//int height[200000][2] = { 0 };
//int map[502][502] = { 0 };
//int sum[502] = { 0 };
//int sum2[502] = { 0 };
//
//
//int main()
//{
// int n, m;
// int count = 0;
// scanf("%d", &n);
// scanf("%d", &m);
//
// for (int i = 0; i < m; i++)
// {
// scanf("%d %d", &height[i][0], &height[i][1]);
// map[height[i][0]][height[i][1]] = 1;
// }
//
// for (int l = 1; l <= n; l++)
// {
// for (int i = 1; i <= n; i++)
// {
// for (int j = 1; j <= n; j++)
// {
// for (int k = 1; k <= n; k++)
// {
// if (map[i][j] == 1)
// {
// map[i][k] = map[j][k] | map[i][k];
// }
// }
// }
// }
// }
//
// for (int i = 1; i <= n; i++)
// {
// for (int j = 1; j <= n; j++)
// {
// sum[i] += map[i][j];
// sum2[i] += map[j][i];
// }
// }
//
// for (int i = 1; i <= n; i++)
// {
// sum[i] += sum2[i];
// if (sum[i] == n-1)
// {
// count++;
// }
// }
//
//
// printf("%d", count);
//
//}
#include<stdio.h>
int map[502][502] = {0};
int chk[502][502] = {0};
int wSum[502] = {0}, hSum[502] = {0};
int n, k;
void search(int p, int c) {
int i;
for(i=1; i<=n; i++) {
if(map[p][i]==1 && chk[c][i]==0) {
chk[c][i] = 1;
wSum[c]++;
hSum[i]++;
search(i, c);
}
}
}
int main() {
int i, j;
int x, y;
int count=0;
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++) {
search(i, i);
}
for(i=1; i<=n; i++) {
wSum[i] += hSum[i];
}
for (i=1; i<=n; i++)
{
if (wSum[i] == n-1)
{
count++;
}
}
printf("%d", count);
}



