#include
#define inf 214748263
#include
#include
#include
#define N 500
#include
using namespace std;
int dis[250],n,m,ans,tot=1,a,b,c,i,head[N],nn;
struct Edge{
int to,next,w;
}e[N<<1];
inline void ins(int u,int v,int w){
e[++tot].w=w; e[tot].to=v; e[tot].next=head[u]; head[u]=tot;
}
int bfs() {
memset(dis,-1,sizeof(dis)); dis[1]=0; queue<int>q;
q.push(1);
while(!q.empty()) {
int now=q.front(); q.pop();
for(int k=head[now];k;k=e[k].next)
if (dis[e[k].to]<0 && e[k].w>0) {
dis[e[k].to]=dis[now]+1; q.push(e[k].to);
}
}
if (dis[m]>0) return 1; else return 0;
}
int find(int x,int low) {
if(x==m)return low; int a;
for(int k=head[x];k;k=e[k].next)
if(e[k].w>0 && dis[e[k].to]==dis[x]+1 && (a=find(e[k].to,min(low,e[k].w))))
{
e[k].w-=a; e[k^1].w+=a; return a;
}
return 0;
}
int main () {
freopen("flyer.in","r",stdin); freopen("flyer.out","w",stdout);
scanf("%d%d",&nn,&n); nn-=n; m=1+n+nn+1;
for(i=1;i<=n;i++) ins(1,1+i,1),ins(i+1,1,0);
for(i=1;i<=nn;i++) ins(1+n+i,m,1),ins(m,1+n+i,0);
while(scanf("%d%d",&a,&b)!=EOF) {
++a; ++b;
ins(a,b,1); ins(b,a,0);
}
while (bfs()) {
while(tot=find(1,inf)) ans+=tot;
}
printf("%d",ans);fclose(stdin); fclose(stdout);
}