#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
const int N=1000; // حداکثر تعداد رئوس
int in_vectors[N]; // (تعداد یال ورودی هر راس (از بین رئوسی که هنوز حذف نشده‌اند
int top_sort[N]; // آرایه‌ای مرتب‌سازی توپولوژیک را نگه می‌دارد
int n, m; // تعداد رئوس و تعداد یال‌ها
vector<int> g[N]; // مجموعه‌ یال‌های گراف
vector<int> mySet; // مجموعه‌ای از راس‌ها که‌یال ورودی ندارند
bool test_graph() {
	for(int i=0; i<n; i++)
		if(in_vectors[i]==0)
			mySet.push_back(i);
	for(int i=0; i<n; i++){
		if(mySet.size()==0)
			return false;
		mySet.pop_back();
		int v=*mySet.end();
		top_sort[i]=v; // این آرایه در نهایت اگر دوری وجود نداشته باشد یک مرتب‌سازی توپولوزیک نگه می‌دارد
		for(int j=0; j<g[v].size(); j++){
			int to=g[v][j];
			in_vectors[to]--;
			if(in_vectors[to]==0)
				mySet.push_back(to);
		}
	}
	return true;
}
 
int main() {
	cin >> n>>m;
	vector <int> a;
	fill_n(in_vectors,n,0);
	for(int i=0; i<m; i++){
		int t,r;
		cin >>t>>r;
		g[--t].push_back(--r);
                /* 
                * است n است ولی بازه معتبر راس ها در ورودی ۱ تا n-۱ بازه معتبر راس ها برای ما صفر تا 
                * پس ما باید قبل از ذخیره‌یکی از آن‌ها کم کنیم
                */
		in_vectors[r]++;
	}
	if(test_graph()==true)
		cout << "No Cycle"<<endl;
	else
		cout << "There is a Cycle"<<endl;

}