#include <bits/stdc++.h>
using namespace std;
struct node {
  int active;
  set<int> prev, next;
  node() : active(1) {}
};
int main() {
  int n, k, m, i, j;
  int a, b;
  cin >> n >> m;
  int cnt = 1;
  set<int> sh;
  set<int>::iterator it;
  for (i = 0; i < n; i++) sh.insert(i);
  node* graf = new node[n];
  for (i = 0; i < m; i++) {
    cin >> a >> b;
    a--, b--;
    if (graf[a].active == 0) continue;
    if (graf[b].prev.size() == 0) sh.erase(b);
    graf[a].next.insert(b);
    graf[b].prev.insert(a);
    while (sh.size() == 1) {
      k = *sh.begin();
      cnt++;
      if (cnt == n) {
        cout << i + 1 << endl;
        return 0;
      }
      for (it = graf[k].next.begin(); it != graf[k].next.end(); it++) {
        j = *it;
        graf[j].prev.erase(k);
        if (graf[j].prev.size() == 0) sh.insert(j);
      }
      sh.erase(k);
      graf[k].active = 0;
    }
  }
  cout << -1 << endl;
}
