#include <stdio.h>
#define N 2005
int n, m, i, j, k, a, b, ans;
int h[N], v[N], s[N][N];
struct AB{
int a, b, n;
} d[N];
void dfs(int a, int c){
int b, i;
if(v[a] == k) return;
v[a] = k;//时间戳
if(c > 1){
ans += s[k][a]^1;
s[k][a] = 1;//加过不再加
}//深度至少为2才需要加边
for(i=h[a]; i; i=d[i].n){
b = d[i].b;
dfs(b, c+1);
}
}
int main(){
scanf("%d%d", &n, &m);
for(i=1; i<=m; i++){
scanf("%d%d", &a, &b);
s[a][b] = 1;
d[i].a = a, d[i].b = b;
d[i].n = h[a], h[a] = i;
}
for(k=1; k<=n; k++){
dfs(k, 1);
}//依次统计每个点需要增加的边
printf("%d\n", ans);
return 0;
}