#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
#include <math.h>
#include <climits>
using namespace std;
int n, m, t, op;
int upperBound(vector<int> &v, int start, int end, int val) {
int middle = (end - start) / 2 + start;
if (start == end) {
if (v[start] == val) return start;
return -2;
}
if (start == end - 1) {
if (v[end] == val) return end;
if (v[start] == val) return start;
return -2;
}
if (v[middle] > val) return upperBound(v, start, middle, val);
return upperBound(v, middle, end, val);
}
int upperBound2(vector<int> &v, int start, int end, int val) {
int middle = (end - start) / 2 + start;
if (start == end) {
if (v[start] <= val) return start;
return -2;
}
if (start == end - 1) {
if (v[end] <= val) return end;
if (v[start] <= val) return start;
return -2;
}
if (v[middle] > val) return upperBound2(v, start, middle, val);
return upperBound2(v, middle, end, val);
}
int lowerBound(vector<int> &v, int start, int end, int val) {
int middle = (end - start) / 2 + start;
if (start == end) {
if (v[start] >= val) return start;
return -2;
}
if (start == end - 1) {
if (v[start] >= val) return start;
if (v[end] >= val) return end;
return -2;
}
if (v[middle] >= val) return lowerBound(v, start, middle, val);
return lowerBound(v, middle, end, val);
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &n);
vector<int> v;
for (int i = 0; i < n; i ++) {
scanf("%d", &t);
v.push_back(t);
}
scanf("%d", &m);
for (int i = 0; i < m; i ++) {
scanf("%d %d", &op, &t);
if (op == 0) {
int sol = upperBound(v, 0, v.size() - 1, t);
printf("%d\n", sol + 1);
} else if (op == 1) {
int sol = upperBound2(v, 0, v.size() - 1, t);
printf("%d\n", sol + 1);
} else if (op == 2) {
int sol = lowerBound(v, 0, v.size() - 1, t);
printf("%d\n", sol + 1);
}
}
return 0;
}