#include<stdio.h>
#include<string.h>
int lj[1010],k[1010],ans,m,n,a[1010][1010];
int DFS(int v){
int i;
for(i=1;i<=n;i++){
if(!k[i] && a[v][i]){
k[i]=1;
if(!lj[i] || DFS(lj[i])){
lj[i]=v;
return 1;
}
}
}
return 0;
}
int main(){
int i;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
a[x][y]=1;
}
for(i=1;i<=n;i++){
memset(k,0,sizeof(k));
ans+=DFS(i);
}
printf("%d",ans);
return 0;
}
#include<string.h>
int lj[1010],k[1010],ans,m,n,a[1010][1010];
int DFS(int v){
int i;
for(i=1;i<=n;i++){
if(!k[i] && a[v][i]){
k[i]=1;
if(!lj[i] || DFS(lj[i])){
lj[i]=v;
return 1;
}
}
}
return 0;
}
int main(){
int i;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
a[x][y]=1;
}
for(i=1;i<=n;i++){
memset(k,0,sizeof(k));
ans+=DFS(i);
}
printf("%d",ans);
return 0;
}