#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ifstream fin("cautbin.in");
int elem_cnt;
fin >> elem_cnt;
vector<int> A(elem_cnt);
for (int i = 0; i < elem_cnt; ++i) {
fin >> A[i];
}
ofstream fout("cautbin.out");
int queries_cnt, operation_type, x;
fin >> queries_cnt;
for (int i = 0; i < queries_cnt; ++i) {
fin >> operation_type >> x;
switch (operation_type) {
case 0: {
auto idx = upper_bound(A.begin(), A.end(), x)- A.begin();
if (static_cast<size_t>(idx) == A.size()
|| idx == 0 || A[idx - 1] != x) {
fout << -1 << '\n';
} else {
fout << idx << '\n';
}
break;
} case 1: {
auto idx = upper_bound(A.begin(), A.end(), x) - A.begin();
fout << idx << '\n';
break;
} case 2: {
auto idx = lower_bound(A.begin(), A.end(), x) - A.begin();
fout << idx + 1 << '\n';
break;
}
}
}
return 0;
}