#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
#include <set>

#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,j) FOR(i,0,j)
#define mp std::make_pair

const int INF = 1 << 24;
const int dx[8] = {0, 0, 1, -1, 1, 1, -1, -1}, dy[8] = {1, -1, 0, 0, 1, -1, 1, -1};

typedef unsigned long long ull;
typedef std::pair<int,int> P;

struct Edge{
    int from, to, cost;
};

const int MAX_V = 100;
int d[MAX_V];

int main(){
    int V, E;
    std::cin >> V >> E;

    std::vector<Edge> G;
    REP(i, E){
        int from, to;
        std::cin >> from >> to;

        G.push_back({from, to, -1});
    }
    
    bool f = false;
    REP(i, V){
        REP(j, E){
            Edge &e = G[j];
            if(d[e.to] > d[e.from] + e.cost){
                d[e.to] = d[e.from] + e.cost;
                if(i == V-1){f = true;}
            }
        }
    }

    if(f){puts("1");}
    else{puts("0");}
}