#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+5;
std::vector<int> vec[N];
int in[N];//记录每个点的入度
int num;//标记已经剥离出来的点的个数
int n, m;//网络的点的个数,边的个数
int vis[N];//标记点是否被访问过
void dfs(int x) {
num ++;
vis[x] = 1;
for(int i = 0; i < vec[x].size(); i++) {
int v = vec[x][i];
in[v] --;
if(in[v] == 0) dfs(v);//入度为零,就调用该点的dfs(),相当于把该点从网络里剥离出来
}
}
//无环 true
bool toposort() {
memset(vis,0,sizeof(vis));
memset(in,0,sizeof(in));
num = 0;
for(int i = 1; i <= n; i++) {//注意点的编号是 0 到 n-1 还是 1 到 n
if(!in[i] && !vis[i]) {
dfs(i);
}
}
if(num == n) return true;
else return false;
}
int main() {
cin >> n >> m;
int x, y;
for(int i = 0; i < m; i++) {
cin >> x >> y;
vec[x].push_back(y);
in[y] ++;
}
bool ans = toposort();
}