// https://szkopul.edu.pl/problemset/problem/9TaxfuNdAv2FPpQ6PeB-vlti/site/?key=statement
#include <bits/stdc++.h>
using namespace std;
constexpr int sizik = 1000 * 1001;
int rp[sizik], cnt = 0, vis1 = 1;
std::vector<int> kra[sizik], kra1[sizik], kra2[sizik], kra3[sizik], post;
int visited[sizik];
std::bitset<sizik> isGood1, isGood2;
int cl[sizik];
void DFS(int v) {
if (visited[v] == vis1) {
return;
}
visited[v] = vis1;
for (const auto& u : kra[v]) {
DFS(u);
}
post.push_back(v);
}
void DFS1(int v) {
if (visited[v] == vis1) {
return;
}
visited[v] = vis1;
rp[v] = cnt;
for (const auto& u : kra1[v]) {
DFS1(u);
}
}
void DFS2(int v, int prev) {
if (rp[v] != rp[prev]) {
kra2[rp[prev]].push_back(rp[v]);
kra3[rp[v]].push_back(rp[prev]);
}
if (visited[v] == vis1) {
return;
}
visited[v] = vis1;
for (const auto& u : kra[v]) {
DFS2(u, v);
}
}
int main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int n, m;
std::cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b;
std::cin >> a >> b;
kra[a].push_back(b);
kra1[b].push_back(a);
}
vis1++;
for (int i = 1; i <= n; i++) {
if (visited[i] != vis1) {
DFS(i);
}
}
vis1++;
for (int i = post.size() - 1; i >= 0; i--) {
if (visited[post[i]] != vis1) {
cnt++;
DFS1(post[i]);
}
}
vis1++;
for (int i = 1; i <= n; i++) {
if (visited[i] != vis1) {
DFS2(i, i);
}
}
int maxi = 0;
for (int i = 1; i <= cnt; i++) {
cl[i] = INT_MAX;
for (const auto& a : kra2[i]) {
cl[i] = std::min(cl[i], a);
}
if (maxi <= i) {
isGood1[i] = true;
}
maxi = std::max(maxi, cl[i]);
}
int mini = INT_MAX;
for (int i = cnt; i >= 1; i--) {
cl[i] = 0;
for (const auto& a : kra3[i]) {
cl[i] = std::max(cl[i], a);
}
if (mini >= i) {
isGood2[i] = true;
}
mini = std::min(mini, cl[i]);
}
std::vector<int> ans;
for (int i = 1; i <= n; i++) {
if (isGood1[rp[i]] && isGood2[rp[i]]) {
ans.push_back(i);
}
}
std::cout << ans.size() << '\n';
if (ans.size() == 0) std::cout << '\n';
for (int i = 0; i < ans.size(); i++) {
std::cout << ans[i] << " \n"[i == (ans.size() - 1)];
}
return 0;
}