#include <bits/stdc++.h>
using namespace std;

const int N=205;
const int M=30005;
int n, m;

bool g[N][N], vis[N];
int match[N];

bool find(int x){
    for(int i=1; i<=n; ++i){
        if(g[x][i] && !vis[i]){
            vis[i]=true;
            int r=match[i];
            if(r==-1 || find(r)){
                match[i]=x;
                return true;
            }
        }
    }
    return false;
}

int main(){
    memset(g, 0x00, sizeof g);
    memset(match, -1, sizeof match);
    cin>>n>>m;
    while(m--){
        int a, b;
        cin>>a>>b;
        g[a][b]=true;
    }

    // 求传递闭包
    for(int k=1; k<=n; ++k)
        for(int i=1; i<=n; ++i)
            for(int j=1; j<=n; ++j)
                g[i][j]|=(g[i][k]&g[k][j]);

    int ans=0;
    // 求最大匹配
    for(int i=1; i<=n; ++i){
        memset(vis, 0x00, sizeof vis);
        if(find(i)) ++ans;
    }
    cout<<n-ans<<endl;

    return 0;
}