#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;   }   