#include <bits/stdc++.h>
using namespace std;
int const MAXN = 100100;
vector<int> g[MAXN];
char c[MAXN];
int tin[MAXN];
int dfs1(int v, int depth) {
  if (c[v] == 2) return 0;
  if (c[v] == 1) return v;
  c[v] = 1;
  for (int to : g[v])
    if (int ret = dfs1(to, depth + 1)) {
      if (ret < 0) return ret;
      tin[v] = depth;
      return v == ret ? -v : ret;
    }
  c[v] = 2;
  return 0;
}
inline int round_shift(int x, int start, int n) {
  return tin[x] > tin[start] ? tin[x] : tin[x] + n;
}
int ret[MAXN];
int dfs2(int v, int start, int n) {
  c[v] = 1;
  for (int to : g[v]) {
    int sub;
    if (tin[to])
      sub = to;
    else if (c[to])
      sub = ret[to];
    else
      sub = dfs2(to, start, n);
    if (sub) {
      if (!ret[v])
        ret[v] = sub;
      else if (round_shift(sub, start, n) > round_shift(ret[v], start, n))
        ret[v] = sub;
    }
  }
  return ret[v];
}
int ans;
void dfs3(int v) {
  if (c[v] == 1) {
    if (v != ans) ans = -1;
    return;
  }
  if (c[v] == 2) return;
  c[v] = 1;
  for (int to : g[v]) dfs3(to);
  c[v] = 2;
}
int diff[2 * MAXN], nest[2 * MAXN];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    g[u].push_back(v);
  }
  for (int v = 1; v <= n; ++v)
    if (dfs1(v, 1)) break;
  memset(c, 0, sizeof(c));
  for (int v = 1; v <= n; ++v)
    if (tin[v])
      if (int to = dfs2(v, v, n)) {
        ++diff[tin[v] + 1];
        --diff[round_shift(to, v, n)];
      }
  for (int j = 1; j <= 2 * n; ++j) nest[j] = nest[j - 1] + diff[j];
  ans = 1;
  while (ans <= n && (!tin[ans] || nest[tin[ans]] || nest[tin[ans] + n])) ++ans;
  memset(c, 0, sizeof(c));
  if (ans > n)
    ans = -1;
  else {
    dfs3(ans);
    for (int v = 1; v <= n; ++v) dfs3(v);
  }
  printf("%d", ans);
  return 0;
}
