#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100001], n, i;
int BinarySearch(int vec[], int n, int l, int r, int elem)
{
if (l > r)
return -1;
int mid = l + (r-l)/2;
if (elem == vec[mid])
{
if (mid < n-1 && vec[mid + 1] != elem)
{
return mid;
}
else if (mid < n - 1 && vec[mid + 1] == elem)
{
return BinarySearch(vec,n, mid + 1, r, elem);
}
return BinarySearch(vec,n, l, mid - 1, elem);
}
if (elem < vec[mid]) return BinarySearch(vec,n, l, mid - 1, elem);
return BinarySearch(vec,n, mid + 1, r, elem);
}
int BinarySearch1(int vec[], int n, int l, int r, int elem)
{
if (l > r)
return l;
int mid = l + (r-l)/2;
if (elem == vec[mid])
{
if (mid < n-1 && vec[mid + 1] != elem)
{
return mid;
}
else if (mid < n - 1 && vec[mid + 1] == elem)
{
return BinarySearch1(vec,n, mid + 1, r, elem);
}
return BinarySearch1(vec,n, l, mid - 1, elem);
}
if (elem < vec[mid]) return BinarySearch1(vec,n, l, mid - 1, elem);
return BinarySearch1(vec,n, mid + 1, r, elem);
}
int BinarySearch2(int vec[], int n, int l, int r, int elem)
{
if (l > r)
return l;
int mid = l + (r-l)/2;
if (elem == vec[mid])
{
if (mid > 0 && vec[mid - 1] != elem)
{
return mid;
}
else if (mid > 0 && vec[mid - 1] == elem)
{
return BinarySearch2(vec,n, l, mid - 1, elem);
}
return BinarySearch2(vec,n, mid + 1, r, elem);
}
if (elem < vec[mid]) return BinarySearch2(vec,n, l, mid - 1, elem);
return BinarySearch2(vec,n, mid + 1, r, elem);
}
int main(){
int TipIntrebare, NrIntrebari, NrDeVerificat, PozNrVerificat;
fin >> n;
for (i = 0; i<n; i++)
fin >> v[i];
fin >> NrIntrebari;
for (i = 1; i <= NrIntrebari; i++){
fin >> TipIntrebare >> NrDeVerificat;
if (TipIntrebare == 0){
PozNrVerificat = BinarySearch(v, n, 0, n-1, NrDeVerificat);
if (PozNrVerificat == -1)
fout << PozNrVerificat << '\n';
else
fout << PozNrVerificat+1 << '\n';
}
else if (TipIntrebare == 1){
fout << BinarySearch1(v, n, 0, n-1, NrDeVerificat)+1 << '\n';
} else if (TipIntrebare == 2){
fout << BinarySearch2(v, n, 0, n-1, NrDeVerificat)+1 << '\n';
}
}
return 0;
}