#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 = 8e2 + 5;
// Coi mỗi thành phần liên thông mạnh như một nhóm
// Chỉ cần "nhóm trưởng" biết tin thì cả nhóm đều sẽ biết
// => Nén mỗi thành phần liên thông mạnh thành 1 đỉnh
// Ở đồ thị G' sau khi nén, có nhận xét:
// G' là DAG (đồ thị có hướng không có chu trình)
// Với một đỉnh u bất kì, nếu tồn tại cung đi vào u thì không việc gì phải truyền tin cho u cả
// ví dụ tồn tại cung v -> u thì thay vì truyền tin cho u thì ta truyền tin cho v sẽ tốt hơn
// => Đáp án chính là số đỉnh có bậc vào = 0
int n, m;
vector<int> adj[N];
int num_scc;
int tin[N], low[N], timer;
int id[N]; // id[u]: u thuộc thành phần liên thông mạnh nào
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;
id[v] = num_scc;
if (v == u) break;
}
}
}
int indeg[N];
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);
}
for (int u = 1; u <= n; u++) {
for (int v : adj[u]) {
if (id[u] == id[v]) continue;
indeg[id[v]]++;
}
}
int ans = 0;
for (int u = 1; u <= num_scc; u++) {
ans += (indeg[u] == 0);
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSA4ZTIgKyA1OyAKCi8vIENvaSBt4buXaSB0aMOgbmggcGjhuqduIGxpw6puIHRow7RuZyBt4bqhbmggbmjGsCBt4buZdCBuaMOzbQkKLy8gQ2jhu4kgY+G6p24gIm5ow7NtIHRyxrDhu59uZyIgYmnhur90IHRpbiB0aMOsIGPhuqMgbmjDs20gxJHhu4F1IHPhur0gYmnhur90Ci8vID0+IE7DqW4gbeG7l2kgdGjDoG5oIHBo4bqnbiBsacOqbiB0aMO0bmcgbeG6oW5oIHRow6BuaCAxIMSR4buJbmgKLy8g4bueIMSR4buTIHRo4buLIEcnIHNhdSBraGkgbsOpbiwgY8OzIG5o4bqtbiB4w6l0OgovLyBHJyBsw6AgREFHICjEkeG7kyB0aOG7iyBjw7MgaMaw4bubbmcga2jDtG5nIGPDsyBjaHUgdHLDrG5oKSAKLy8gVuG7m2kgbeG7mXQgxJHhu4luaCB1IGLhuqV0IGvDrCwgbuG6v3UgdOG7k24gdOG6oWkgY3VuZyDEkWkgdsOgbyB1IHRow6wga2jDtG5nIHZp4buHYyBnw6wgcGjhuqNpIHRydXnhu4FuIHRpbiBjaG8gdSBj4bqjCi8vIHbDrSBk4bulIHThu5NuIHThuqFpIGN1bmcgdiAtPiB1IHRow6wgdGhheSB2w6wgdHJ1eeG7gW4gdGluIGNobyB1IHRow6wgdGEgdHJ1eeG7gW4gdGluIGNobyB2IHPhur0gdOG7kXQgaMahbgovLyA9PiDEkMOhcCDDoW4gY2jDrW5oIGzDoCBz4buRIMSR4buJbmggY8OzIGLhuq1jIHbDoG8gPSAwCmludCBuLCBtOyAgCnZlY3RvcjxpbnQ+IGFkaltOXTsgCgppbnQgbnVtX3NjYzsgICAKaW50IHRpbltOXSwgbG93W05dLCB0aW1lcjsgIAppbnQgaWRbTl07IC8vIGlkW3VdOiB1IHRodeG7mWMgdGjDoG5oIHBo4bqnbiBsacOqbiB0aMO0bmcgbeG6oW5oIG7DoG8KdmVjdG9yPGludD4gczsgICAKYm9vbCBpbl9zdGFja1tOXTsgCgp2b2lkIGRmcyhpbnQgdSkgewoJdGluW3VdID0gbG93W3VdID0gKyt0aW1lcjsgICAKCXMucHVzaF9iYWNrKHUpOyAgIAoJaW5fc3RhY2tbdV0gPSB0cnVlOyAgCgoJZm9yIChpbnQgdiA6IGFkalt1XSkgewoJCWlmICghdGluW3ZdKSB7CgkJCWRmcyh2KTsgIAoJCX0KCQlpZiAoaW5fc3RhY2tbdl0pIHsKCQkJbG93W3VdID0gbWluKGxvd1t1XSwgbG93W3ZdKTsgCgkJfQoJfQoKCWlmIChsb3dbdV0gPT0gdGluW3VdKSB7CgkJbnVtX3NjYysrOyAgIAoJCXdoaWxlICh0cnVlKSB7CgkJCWludCB2ID0gcy5iYWNrKCk7IHMucG9wX2JhY2soKTsgIAoJCQlpbl9zdGFja1t2XSA9IGZhbHNlOyAKCQkJaWRbdl0gPSBudW1fc2NjOyAgCgkJCWlmICh2ID09IHUpIGJyZWFrOyAKCQl9Cgl9Cn0KCmludCBpbmRlZ1tOXTsgCgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gbiA+PiBtOyAKCglmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewoJCWludCB1LCB2OyAKCQljaW4gPj4gdSA+PiB2OyAKCQlhZGpbdV0ucHVzaF9iYWNrKHYpOyAKCX0KCgl0aW1lciA9IDA7IAoJbnVtX3NjYyA9IDA7IAoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSB7CgkJaWYgKCF0aW5bdV0pIGRmcyh1KTsgCgl9CgoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSB7CgkJZm9yIChpbnQgdiA6IGFkalt1XSkgewoJCQlpZiAoaWRbdV0gPT0gaWRbdl0pIGNvbnRpbnVlOyAgIAoJCQlpbmRlZ1tpZFt2XV0rKzsgCgkJfQoJfQoKCWludCBhbnMgPSAwOyAKCWZvciAoaW50IHUgPSAxOyB1IDw9IG51bV9zY2M7IHUrKykgewoJCWFucyArPSAoaW5kZWdbdV0gPT0gMCk7IAoJfQoKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAp9Cg==