#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 400;
int n, m, cyklSize, blocked, kolor[N], farther[N], pref[2 * N];
vector<int> G[N], pomVec, cykl;
bool DFS(int u) {
  kolor[u] = 1;
  pomVec.push_back(u);
  for (auto v : G[u]) {
    if (kolor[v] == 0 && DFS(v) == true)
      return true;
    else if (kolor[v] == 1) {
      while (true) {
        int pom = pomVec.back();
        pomVec.pop_back();
        cykl.push_back(pom);
        if (pom == v) break;
      }
      reverse(cykl.begin(), cykl.end());
      pomVec.clear();
      return true;
    }
  }
  pomVec.pop_back();
  kolor[u] = 2;
  return false;
}
bool DFS_2(int u, int pocz) {
  kolor[u] = 1;
  farther[u] = -1;
  for (int v : G[u]) {
    if (kolor[v] == 1) return false;
    if (kolor[v] == 0 && DFS_2(v, pocz) == false) return false;
    if (farther[v] >= 0 &&
        (farther[u] == -1 ||
         (farther[v] <= pocz ? farther[v] + cyklSize : farther[v]) >
             (farther[u] <= pocz ? farther[u] + cyklSize : farther[u])))
      farther[u] = farther[v];
  }
  kolor[u] = 2;
  return true;
}
bool DFS_3(int u) {
  kolor[u] = 1;
  for (auto v : G[u]) {
    if (v == blocked) continue;
    if (kolor[v] == 0 && DFS_3(v) == true)
      return true;
    else if (kolor[v] == 1)
      return true;
  }
  kolor[u] = 2;
  return false;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    G[a].push_back(b);
  }
  for (int i = 1; i <= n; i++)
    if (kolor[i] == 0 && DFS(i) == true) break;
  fill(kolor + 1, kolor + n + 1, 0);
  cyklSize = (int)cykl.size();
  for (int i = 0; i < cyklSize; i++) {
    kolor[cykl[i]] = 2;
    farther[cykl[i]] = i;
  }
  for (int i = 0; i < cyklSize; i++) {
    int pom = (i + 1) % cyklSize;
    for (auto v : G[cykl[i]]) {
      if (kolor[v] == 0 && DFS_2(v, i) == false) return 0 * printf("-1\n");
      if (farther[v] >= 0 &&
          (farther[v] <= i ? farther[v] + cyklSize : farther[v]) >
              (pom <= i ? pom + cyklSize : pom))
        pom = farther[v];
    }
    if (pom <= i) pom += cyklSize;
    pref[i + 1]++;
    pref[pom]--;
  }
  int ans = 0;
  for (int i = 1; i < 2 * cyklSize; i++) pref[i] += pref[i - 1];
  for (int i = 0; i < cyklSize; i++) {
    if (pref[i] == 0 && pref[i + cyklSize] == 0) {
      ans = cykl[i];
      break;
    }
  }
  if (ans == 0) return 0 * printf("-1\n");
  blocked = ans;
  fill(kolor + 1, kolor + n + 1, 0);
  for (int i = 1; i <= n; i++)
    if (kolor[i] == 0 && i != ans && DFS_3(i) == true)
      return 0 * printf("-1\n");
  printf("%d\n", ans);
  return 0;
}
