#include<iostream>#include<cstring>usingnamespace std;int n, m;bool g[505][505], vis[505];int match[505];intdfs(int u){for(int i =1; i <= n; i++){if(g[u][i]&&!vis[i]){
vis[i]=true;if(match[i]==-1||dfs(match[i])){
match[i]= u;return1;}}}return0;}intmain(){
cin >> n >> m;int x, y, ans =0;memset(g,false,sizeof(g));for(int i =1; i <= m; i++){
cin >> x >> y;
g[x][y]=true;}memset(match,-1,sizeof(match));for(int i =1; i <= n; i++){memset(vis,false,sizeof(vis));if(dfs(i)) ans ++;}
cout << ans << endl;return0;}