#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
#include<string.h>
int match[1005], vis[1005];
int n, m;
int map[1005][1005];
bool dfs(int u)
{
for(int v=1;v<=n;v++)
if(map[u][v]&&!vis[v])
{
vis[v]=true;
if( match[v] ==-1 || dfs(match[v]))
{
match[v]=u;
return true;
}
}
return false;
}
int main()
{
scanf("%d%d", &n, &m);
memset(map, 0, sizeof(map));
while(m--)
{
int x, y;
scanf("%d%d", &x, &y);
map[x][y] = 1;
}
int sum =0;
memset(match,-1,sizeof(match));
for (int i=1; i<=n; i++)
{
memset(vis,0,sizeof(vis));
if (dfs(i)) sum++;
}
printf("%d\n", sum);
return 0;
}
https://vjudge.net/contest/172543#problem/A