#include <bits/stdc++.h>
using namespace std;
const int N=205;
const int M=30005;
int n, m;
bool g[N][N], vis[N];
int match[N];
bool find(int x){
for(int i=1; i<=n; ++i){
if(g[x][i] && !vis[i]){
vis[i]=true;
int r=match[i];
if(r==-1 || find(r)){
match[i]=x;
return true;
}
}
}
return false;
}
int main(){
memset(g, 0x00, sizeof g);
memset(match, -1, sizeof match);
cin>>n>>m;
while(m--){
int a, b;
cin>>a>>b;
g[a][b]=true;
}
// 求传递闭包
for(int k=1; k<=n; ++k)
for(int i=1; i<=n; ++i)
for(int j=1; j<=n; ++j)
g[i][j]|=(g[i][k]&g[k][j]);
int ans=0;
// 求最大匹配
for(int i=1; i<=n; ++i){
memset(vis, 0x00, sizeof vis);
if(find(i)) ++ans;
}
cout<<n-ans<<endl;
return 0;
}