#include<iostream>#include<string.h>#include<stdio.h>#include<stdlib.h>usingnamespace std;#define MAXN 666bool gra[MAXN][MAXN], vis[MAXN];int cx[MAXN], cy[MAXN];int n;booldfs(int u){for(int i =1; i <= n; i++){if(gra[u][i]&&!vis[i]){
vis[i]=1;if(cy[i]==-1||dfs(cy[i])){
cy[i]= u;
cx[u]= i;returntrue;}}}returnfalse;}voidget_gra(){for(int k =1; k <= n; k++){for(int i =1; i <= n; i++){if( i == k)continue;for(int j =1; j <= n; j++){if( j == k || j == i)continue;if(gra[i][k]&& gra[k][j])
gra[i][j]=1;}}}}voidsolve(){int ans =0;memset(cx,-1,sizeof(cx));memset(cy,-1,sizeof(cy));for(int i =1; i <= n; i++){if(cx[i]==-1){memset(vis,0,sizeof(vis));if(dfs(i)) ans++;}}printf("%d\n",n - ans);}intmain(){int m, u, v;while(scanf("%d %d",&n,&m)&&(n + m)){if(m ==0){printf("%d\n",n);continue;}memset(gra,0,sizeof(gra));for(int i =0; i < m; i++){scanf("%d %d",&u,&v);
gra[u][v]=1;}get_gra();solve();}return0;}