#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<pair<int, int> > g[100010];
int s, t;
int p[100010];
char used[100010];
char oncycle[100010];
int pos[100010];
int an = -1;
int rt;
vector<int> path;
bool dfs1(int v) {
  used[v] = 1;
  for (auto &e : g[v]) {
    int to = e.first;
    if (to == an) continue;
    if (!used[to]) {
      p[to] = v;
      if (dfs1(to)) {
        e.second = 1;
        return true;
      }
    } else if (used[to] == 1) {
      s = v;
      t = to;
      e.second = 1;
      return true;
    }
  }
  used[v] = 2;
  return false;
}
void check(int a) {
  memset(used, 0, sizeof(used));
  an = a;
  for (int i = 0; i < n; i++) {
    if (!used[i]) {
      if (dfs1(i)) {
        cout << -1 << endl;
        exit(0);
      }
    }
  }
  cout << an + 1 << endl;
  exit(0);
}
int dist(int a, int b) {
  a = pos[a];
  b = pos[b];
  int k = path.size();
  return ((b - a) % k + k) % k;
}
int far[100010];
int a[100010];
void dfs2(int v) {
  used[v] = 1;
  for (auto e : g[v]) {
    if (e.second) continue;
    int to = e.first;
    if (oncycle[to]) {
      if (far[v] == -1 || pos[to] > pos[far[v]]) far[v] = to;
    } else {
      if (!used[to]) {
        dfs2(to);
      }
      if (far[v] == -1 || pos[far[to]] > pos[far[v]]) far[v] = far[to];
    }
  }
  used[v] = 2;
}
int main() {
  ios_base::sync_with_stdio(false);
  memset(far, -1, sizeof(far));
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int from, to;
    cin >> from >> to;
    g[from - 1].push_back({to - 1, 0});
  }
  for (int i = 0; i < n; i++) {
    if (!used[i]) {
      if (dfs1(i)) break;
    }
  }
  for (int v = s; v != t; v = p[v]) path.push_back(v);
  path.push_back(t);
  reverse(path.begin(), path.end());
  for (int i = 0; i < path.size(); i++) {
    oncycle[path[i]] = true;
    pos[path[i]] = i;
  }
  memset(used, 0, sizeof(used));
  rt = path[0];
  for (auto u : path) {
    pos[u] += path.size();
    dfs2(u);
  }
  for (auto u : path) {
    if (far[u] == -1) continue;
    int l = pos[far[u]] % path.size();
    int r = pos[u] % path.size();
    a[l]++;
    a[r + 1]--;
    if (l > r) a[0]++;
  }
  for (int i = 1; i < path.size(); i++) a[i] += a[i - 1];
  int mx = -1;
  for (int i = 0; i < path.size(); i++) {
    if (a[i] > mx) {
      mx = a[i];
      an = path[i];
    }
  }
  check(an);
}
