constint N=12; int a[N],b[N],link[N]; int g[N][N],mp[N][N]; bool used[N]; int n,m,ans;
booldfs(int u) { for (int v=1;v<=n;v++) if (g[u][v]&&!used[v]) { used[v]=true; if (link[v]==-1||dfs(link[v])) { link[v]=u; returntrue; } } returnfalse; }
inthungary() { int res=0; memset(link,-1,sizeof(link)); for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) { g[i][j]=0; if (j==n) { if (!mp[i][a[j]]&&!mp[i][a[1]]) g[i][j]=1; } else { if (!mp[i][a[j]]&&!mp[i][a[j+1]]) g[i][j]=1; } } for (int i=1;i<=n;i++) { memset(used,0,sizeof(used)); if (dfs(i)) res++; } return res; }
intmain() { while (scanf("%d%d",&n,&m)!=EOF) { if (!n||!m) { puts("0"); continue; } for (int i=1;i<=n;i++) a[i]=i; memset(mp,0,sizeof(mp)); for (int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); mp[x][y]=1; } ans=n; do { ans=min(ans,n-hungary()); if (!ans) break; } while (next_permutation(a+2,a+n+1)); printf("%d\n",ans); } return0; }