#include <bits/stdc++.h>
using namespace std;
const int mx = 1e5 + 10;
int n, m, in[mx], ty, type[mx], d, mark;
vector<int> vec[mx], sa, rvc[mx];
int vis[mx], flag, cnt;
bool vic[mx];
void dfs1(int x) {
  if (vis[x]) return;
  vis[x] = 1;
  for (int v : vec[x]) dfs1(v);
  sa.push_back(x);
}
void Dfs(int x) {
  if (type[x]) return;
  cnt++;
  type[x] = ty;
  for (int v : rvc[x]) Dfs(v);
}
void dfs(int x, int num) {
  if (flag) return;
  for (int i = 0; i < vec[x].size(); i++) {
    if (flag) return;
    int son = vec[x][i];
    if (vis[son] == num) {
      if (vic[son])
        flag = -1;
      else
        flag = son, vic[son] = 1;
    }
    if (vis[son] < num) vis[son] = num, dfs(son, num);
  }
  vis[x] = num + 1;
}
double TIME() { return 1.0 * clock() / CLOCKS_PER_SEC; }
int check(int x, int num) {
  while (TIME() < 0.5) {
    vis[x] = num + 1;
    dfs(x, num);
    if (!flag) return x;
    if (flag == -1) return -1;
    x = flag, num += 2, flag = 0;
  }
  return -1;
}
int main() {
  scanf("%d%d", &n, &m);
  int a, b, c = 0, ans;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &a, &b);
    vec[a].push_back(b);
    rvc[b].push_back(a);
  }
  for (int i = 1; i <= n; i++)
    if (!vis[i]) dfs1(i);
  for (int i = n - 1; i >= 0; i--)
    if (!type[sa[i]]) {
      cnt = 0, ty++;
      Dfs(sa[i]);
      if (cnt > 1) d++, mark = ty;
    }
  if (d > 1) return 0 * puts("-1");
  memset(vis, 0, sizeof(vis));
  for (int i = 1; i <= n; i++) {
    if (type[i] == mark) {
      return 0 * printf("%d\n", check(i, 1));
    }
  }
  return 0;
}
