#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; }