// tarjan by muoii
// vn.spoj.com/problems/TJALG/

#include <bits/stdc++.h>
using namespace std;
#define tag "main"
#define maxn 100007
#define forinc(i,a,b) for(int i=a;i<=b;i++)
#define fordec(i,a,b) for(int i=a;i>=b;i--)
#define checkfile(FiLeNaMe) { if(fopen(FiLeNaMe".inp","r")) freopen(FiLeNaMe".inp","r",stdin),freopen(FiLeNaMe".out","w",stdout); }
/// --------------------------------------------------------------------------------------------------------------------------------
#define long long long
int n,m;
vector<int> adj[maxn];

// Strong connected components
int scc;
bool dd[maxn];
int num[maxn],low[maxn];
bool deleted[maxn];
stack<int> Stack;
int dfsTime;

void dfs(int u) {
    if(dd[u]) return;

    dd[u]=1;
    num[u]=low[u]=++dfsTime;
    Stack.push(u);

    for(int v : adj[u]) {
        if(deleted[v]) continue;

        if(dd[v]) low[u]=min(low[u],num[v]);
        else dfs(v),low[u]=min(low[u],low[v]);
    }

    if(low[u]==num[u]) {
        ++scc;
        for(int v = Stack.top();v!=u;v=Stack.top()) Stack.pop(),deleted[v]=1;
        deleted[u]=1;
		Stack.pop();
    }
}

void enter(){
    cin>>n>>m;

    for(int i=1,u,v;i<=m;i++) {
        cin>>u>>v;
        adj[u].push_back(v);
    }
}

void solve(){
    forinc(i,1,n) dfs(i);
    cout<<scc;
}

int32_t main()
{
    checkfile(tag);
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    enter();
    solve();

    return 0;
}