# -*- coding: utf-8 -*-

from collections import defaultdict

from collections import deque

import sys

# sys.setrecursionlimit(10**6)

buff_readline = sys.stdin.buffer.readline

readline = sys.stdin.readline



INF = 2**62-1





def read_int():

    return int(buff_readline())





def read_int_n():

    return list(map(int, buff_readline().split()))





def read_float():

    return float(buff_readline())





def read_float_n():

    return list(map(float, buff_readline().split()))





def read_str():

    return readline().strip()





def read_str_n():

    return readline().strip().split()





def error_print(*args):

    print(*args, file=sys.stderr)





def mt(f):

    import time



    def wrap(*args, **kwargs):

        s = time.time()

        ret = f(*args, **kwargs)

        e = time.time()



        error_print(e - s, 'sec')

        return ret



    return wrap





def slv(N, M, AB):



    g = defaultdict(list)

    for a, b in AB:

        g[a].append(b)



    def bfs(s):

        q = deque([s])

        done = {}

        done[s] = 0

        prev = {}

        goal = None

        while q:

            u = q.popleft()

            for v in g[u]:

                if v not in done:

                    done[v] = done[u] + 1

                    prev[v] = u

                    q.append(v)

                if v == s:

                    goal = u

                    break

        if goal is None:

            return None

        v = goal

        ans = [s]

        while v in prev:

            ans.append(v)

            v = prev[v]

        return ans



    ans = [0] * (2*N)

    for i in range(1, N+1):

        a = bfs(i)

        if a and len(ans) > len(a):

            ans = a

    if len(ans) == (2*N):

        print(-1)

        return

    print(len(ans))

    print(*ans, sep='\n')





def main():

    N, M = read_int_n()

    AB = [read_int_n() for _ in range(M)]

    slv(N, M, AB)





if __name__ == '__main__':

    main()

# -*- coding: utf-8 -*-

import sys

# sys.setrecursionlimit(10**6)

# buff_readline = sys.stdin.buffer.readline

buff_readline = sys.stdin.readline

readline = sys.stdin.readline



INF = 2**62-1





def read_int():

    return int(buff_readline())





def read_int_n():

    return list(map(int, buff_readline().split()))





def read_float():

    return float(buff_readline())





def read_float_n():

    return list(map(float, buff_readline().split()))





def read_str():

    return readline().strip()





def read_str_n():

    return readline().strip().split()





def error_print(*args):

    print(*args, file=sys.stderr)





def mt(f):

    import time



    def wrap(*args, **kwargs):

        s = time.time()

        ret = f(*args, **kwargs)

        e = time.time()



        error_print(e - s, 'sec')

        return ret



    return wrap







@mt

def slv(N, M, AB):

    from collections import defaultdict, deque

    g = defaultdict(list)

    for a, b in AB:

        g[a].append(b)



    def bfs(s):

        q = deque()

        q.append(s)

        prev = {}

        while q:

            u = q.popleft()

            for v in g[u]:

                if v in prev:

                    continue

                q.append(v)

                prev[v] = u

                if v == s:

                    break



        if s not in prev:

            return None



        cycle = [s]

        v = s

        while True:

            v = prev[v]

            if v == s:

                break

            cycle.append(v)

        return cycle



    ans = None

    for i in range(1, N+1):

        t = bfs(i)

        if t is not None:

            if ans is None:

                ans = t

            else:

                ans = t if len(t) < len(ans) else ans

    if ans is not None:

        return [len(ans)] + ans

    return [-1]





def main():

    N, M = read_int_n()

    AB = [read_int_n() for _ in range(M)]

    print(*slv(N, M, AB), sep='\n')





if __name__ == '__main__':

    main()

# -*- coding: utf-8 -*-
from collections import defaultdict
from collections import deque
import sys

# sys.setrecursionlimit(10**6)
buff_readline = sys.stdin.buffer.readline
readline = sys.stdin.readline
INF = 2**62 - 1


def read_int():
    return int(buff_readline())


def read_int_n():
    return list(map(int, buff_readline().split()))


def read_float():
    return float(buff_readline())


def read_float_n():
    return list(map(float, buff_readline().split()))


def read_str():
    return readline().strip()


def read_str_n():
    return readline().strip().split()


def error_print(*args):
    print(*args, file=sys.stderr)


def mt(f):
    import time

    def wrap(*args, **kwargs):
        s = time.time()
        ret = f(*args, **kwargs)
        e = time.time()
        error_print(e - s, "sec")
        return ret

    return wrap


def slv(N, M, AB):
    g = defaultdict(list)
    for a, b in AB:
        g[a].append(b)

    def bfs(s):
        q = deque([s])
        done = {}
        done[s] = 0
        prev = {}
        goal = None
        while q:
            u = q.popleft()
            for v in g[u]:
                if v not in done:
                    done[v] = done[u] + 1
                    prev[v] = u
                    q.append(v)
                if v == s:
                    goal = u
                    break
        if goal is None:
            return None
        v = goal
        ans = [s]
        while v in prev:
            ans.append(v)
            v = prev[v]
        return ans

    ans = [0] * (2 * N)
    for i in range(1, N + 1):
        a = bfs(i)
        if a and len(ans) > len(a):
            ans = a
    if len(ans) == (2 * N):
        print(-1)
        return
    print(len(ans))
    print(*ans, sep="\n")


def main():
    N, M = read_int_n()
    AB = [read_int_n() for _ in range(M)]
    slv(N, M, AB)


if __name__ == "__main__":
    main()

# -*- coding: utf-8 -*-
import sys

# sys.setrecursionlimit(10**6)
# buff_readline = sys.stdin.buffer.readline
buff_readline = sys.stdin.readline
readline = sys.stdin.readline
INF = 2**62 - 1


def read_int():
    return int(buff_readline())


def read_int_n():
    return list(map(int, buff_readline().split()))


def read_float():
    return float(buff_readline())


def read_float_n():
    return list(map(float, buff_readline().split()))


def read_str():
    return readline().strip()


def read_str_n():
    return readline().strip().split()


def error_print(*args):
    print(*args, file=sys.stderr)


def mt(f):
    import time

    def wrap(*args, **kwargs):
        s = time.time()
        ret = f(*args, **kwargs)
        e = time.time()
        error_print(e - s, "sec")
        return ret

    return wrap


@mt
def slv(N, M, AB):
    from collections import defaultdict, deque

    g = defaultdict(list)
    for a, b in AB:
        g[a].append(b)

    def bfs(s):
        q = deque()
        q.append(s)
        prev = {}
        while q:
            u = q.popleft()
            for v in g[u]:
                if v in prev:
                    continue
                q.append(v)
                prev[v] = u
                if v == s:
                    break
        if s not in prev:
            return None
        cycle = [s]
        v = s
        while True:
            v = prev[v]
            if v == s:
                break
            cycle.append(v)
        return cycle

    ans = None
    for i in range(1, N + 1):
        t = bfs(i)
        if t is not None:
            if ans is None:
                ans = t
            else:
                ans = t if len(t) < len(ans) else ans
    if ans is not None:
        return [len(ans)] + ans
    return [-1]


def main():
    N, M = read_int_n()
    AB = [read_int_n() for _ in range(M)]
    print(*slv(N, M, AB), sep="\n")


if __name__ == "__main__":
    main()

-from collections import defaultdict -from collections import deque -buff_readline = sys.stdin.buffer.readline +# buff_readline = sys.stdin.buffer.readline +buff_readline = sys.stdin.readline +@mt +    from collections import defaultdict, deque + -        q = deque([s]) -        done = {} -        done[s] = 0 +        q = deque() +        q.append(s) -        goal = None -                if v not in done: -                    done[v] = done[u] + 1 -                    prev[v] = u -                    q.append(v) +                if v in prev: +                    continue +                q.append(v) +                prev[v] = u -                    goal = u -        if goal is None: +        if s not in prev: -        v = goal -        ans = [s] -        while v in prev: -            ans.append(v) +        cycle = [s] +        v = s +        while True: -        return ans +            if v == s: +                break +            cycle.append(v) +        return cycle -    ans = [0] * (2 * N) +    ans = None -        a = bfs(i) -        if a and len(ans) > len(a): -            ans = a -    if len(ans) == (2 * N): -        print(-1) -        return -    print(len(ans)) -    print(*ans, sep="\n") +        t = bfs(i) +        if t is not None: +            if ans is None: +                ans = t +            else: +                ans = t if len(t) < len(ans) else ans +    if ans is not None: +        return [len(ans)] + ans +    return [-1] -    slv(N, M, AB) +    print(*slv(N, M, AB), sep="\n")