#include <bits/stdc++.h>
using namespace std;
const int N = 810005;
int tr[N << 2];
int query(int a, int b, int o, int l, int r) {
  if (a <= l && r <= b) return tr[o];
  int mid = (l + r) / 2;
  if (b <= mid) return tr[o] + query(a, b, o << 1, l, mid);
  if (a > mid) return tr[o] + query(a, b, o << 1 | 1, mid + 1, r);
  return tr[o] + min(query(a, mid, o << 1, l, mid),
                     query(mid + 1, b, o << 1 | 1, mid + 1, r));
}
void update(int a, int b, int v, int o, int l, int r) {
  if (a <= l && r <= b)
    tr[o] += v;
  else {
    int mid = (l + r) / 2;
    if (b <= mid)
      update(a, b, v, o << 1, l, mid);
    else if (a > mid)
      update(a, b, v, o << 1 | 1, mid + 1, r);
    else {
      update(a, mid, v, o << 1, l, mid);
      update(mid + 1, b, v, o << 1 | 1, mid + 1, r);
    }
  }
}
int n;
int data[N][2];
int dc[N], dn;
int get(int v, bool flag = false) {
  if (flag) return upper_bound(dc + 1, dc + dn + 1, v) - 1 - dc;
  return lower_bound(dc + 1, dc + dn + 1, v) - dc;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int l, r;
    scanf("%d%d", &l, &r);
    data[i][0] = l, data[i][1] = r;
    dc[++dn] = l;
    dc[++dn] = l - 1;
    dc[++dn] = r;
    dc[++dn] = r + 1;
  }
  sort(dc + 1, dc + dn + 1);
  dn = unique(dc + 1, dc + dn + 1) - dc - 1;
  for (int i = 1; i <= n; i++) {
    update(get(data[i][0]), get(data[i][1], true), 1, 1, 1, dn);
  }
  int ans = -1;
  for (int i = 1; i <= n; i++) {
    if (query(get(data[i][0]), get(data[i][1], true), 1, 1, dn) > 1) {
      ans = i;
    }
  }
  printf("%d\n", ans);
  return 0;
}
