#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e4 + 5;
int n, m;
vector<int> adj[N];
// Thuật toán Tarjan
int num_scc; // Số thành phần liên thông mạnh
int tin[N], low[N], timer;
vector<int> s;
bool in_stack[N];
void dfs(int u) {
tin[u] = low[u] = ++timer;
s.push_back(u);
in_stack[u] = true;
for (int v : adj[u]) {
if (!tin[v]) {
dfs(v);
}
if (in_stack[v]) {
low[u] = min(low[u], low[v]);
}
}
if (low[u] == tin[u]) {
num_scc++;
while (true) {
int v = s.back(); s.pop_back();
in_stack[v] = false;
if (v == u) break;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
}
timer = 0;
num_scc = 0;
for (int u = 1; u <= n; u++) {
if (!tin[u]) dfs(u);
}
cout << num_scc << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAxZTQgKyA1OyAKCmludCBuLCBtOyAgCnZlY3RvcjxpbnQ+IGFkaltOXTsgCgovLyBUaHXhuq10IHRvw6FuIFRhcmphbgppbnQgbnVtX3NjYzsgLy8gU+G7kSB0aMOgbmggcGjhuqduIGxpw6puIHRow7RuZyBt4bqhbmgKaW50IHRpbltOXSwgbG93W05dLCB0aW1lcjsgIAp2ZWN0b3I8aW50PiBzOyAgIApib29sIGluX3N0YWNrW05dOyAKCnZvaWQgZGZzKGludCB1KSB7Cgl0aW5bdV0gPSBsb3dbdV0gPSArK3RpbWVyOyAgIAoJcy5wdXNoX2JhY2sodSk7ICAgCglpbl9zdGFja1t1XSA9IHRydWU7ICAKCglmb3IgKGludCB2IDogYWRqW3VdKSB7CgkJaWYgKCF0aW5bdl0pIHsKCQkJZGZzKHYpOyAgCgkJfQoJCWlmIChpbl9zdGFja1t2XSkgewoJCQlsb3dbdV0gPSBtaW4obG93W3VdLCBsb3dbdl0pOyAKCQl9Cgl9CgoJaWYgKGxvd1t1XSA9PSB0aW5bdV0pIHsKCQludW1fc2NjKys7ICAgCgkJd2hpbGUgKHRydWUpIHsKCQkJaW50IHYgPSBzLmJhY2soKTsgcy5wb3BfYmFjaygpOyAgCgkJCWluX3N0YWNrW3ZdID0gZmFsc2U7IAoJCQlpZiAodiA9PSB1KSBicmVhazsgCgkJfQoJfQp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gbiA+PiBtOyAKCglmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewoJCWludCB1LCB2OyAKCQljaW4gPj4gdSA+PiB2OyAKCQlhZGpbdV0ucHVzaF9iYWNrKHYpOyAKCX0KCgl0aW1lciA9IDA7IAoJbnVtX3NjYyA9IDA7IAoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSB7CgkJaWYgKCF0aW5bdV0pIGRmcyh1KTsgCgl9CgoJY291dCA8PCBudW1fc2NjIDw8ICdcbic7IAp9