#include <bits/stdc++.h>
using namespace std;
vector<int> DO1(6e6 + 1000, 0);
vector<int> DO2(6e6 + 1000, 0);
void push(int nom, int l, int r) {
  DO1[nom] += DO2[nom];
  if (l != r) {
    DO2[nom * 2] += DO2[nom];
    DO2[nom * 2 + 1] += DO2[nom];
  }
  DO2[nom] = 0;
}
void add(int nom, int l, int r, int nl, int nr, int n) {
  push(nom, l, r);
  if (r < nl) return;
  if (nr < l) return;
  if (l == nl && r == nr) {
    DO2[nom] = n;
    push(nom, l, r);
    return;
  }
  int mid = (l + r) / 2;
  add(nom * 2, l, mid, nl, min(mid, nr), n);
  add(nom * 2 + 1, mid + 1, r, max(mid + 1, nl), nr, n);
  DO1[nom] = min(DO1[nom * 2], DO1[nom * 2 + 1]);
}
int found(int nom, int l, int r, int nl, int nr) {
  push(nom, l, r);
  if (r < nl) return 999;
  if (nr < l) return 999;
  if (l == nl && r == nr) {
    return DO1[nom];
  }
  int mid = (l + r) / 2;
  int a1, a2;
  a1 = found(nom * 2, l, mid, nl, min(mid, nr));
  a2 = found(nom * 2 + 1, mid + 1, r, max(mid + 1, nl), nr);
  return min(a1, a2);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int a, s, d, i, j, k;
  cin >> a;
  vector<int> v1, v2;
  set<int> v;
  set<int>::iterator ii;
  for (i = 0; i < a; i++) {
    int a1, a2;
    cin >> a1 >> a2;
    v.insert(a1);
    v.insert(a1 + 1);
    v.insert(a1 - 1);
    v.insert(a2);
    v.insert(a2 + 1);
    v.insert(a2 - 1);
    v1.push_back(a1);
    v2.push_back(a2);
  }
  map<int, int> ma;
  int nom = 1;
  for (ii = v.begin(); ii != v.end(); ii++) {
    ma[*ii] = nom;
    nom++;
  }
  for (i = 0; i < a; i++) {
    add(1, 1, v.size() + 2, ma[v1[i]], ma[v2[i]], 1);
  }
  for (i = 0; i < a; i++) {
    if (found(1, 1, v.size() + 2, ma[v1[i]], ma[v2[i]]) > 1) {
      cout << i + 1;
      return 0;
    }
  }
  cout << -1;
}
