//Enunt: http://www.infoarena.ro/problema/cautbin
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int N,M;
struct question{
short abs,ord;
};
int cbin(int v[],int x,int st,int dr)
{
if(st<=dr)
{
int mij=(st+dr)/2;
if(x<v[mij])
return cbin(v,x,st,mij-1);
if(x>v[mij])
return cbin(v,x,mij+1,dr);
if(x==v[mij] && x==v[mij+1])
return cbin(v,x,mij+1,dr);
if(x==v[mij] && x!=v[mij+1])
return mij;
}
else return -1;
}
int cbin2(int v[],int x,int st,int dr)
{
if(st<=dr)
{
int mij=(st+dr)/2;
if(x<v[mij])
return cbin2(v,x,st,mij-1);
if(x>v[mij])
return cbin2(v,x,mij+1,dr);
if(x==v[mij] && x==v[mij-1])
return cbin2(v,x,st,mij-1);
if(x==v[mij] && x!=v[mij-1])
return mij;
}
else return -1;
}
int main()
{
in>>N;
int s[N+1],i;
for(i=1;i<=N;++i)
in>>s[i];
in>>M;
struct question t[M+1];
for(i=1;i<=M;++i)
{
in>>t[i].abs>>t[i].ord;
if(t[i].abs==0)
out<<cbin(s,t[i].ord,1,N)<<'\n';
if(t[i].abs==1)
{
bool gasit=0;
for(i=t[i].ord;i>=s[1] && !gasit;--i)
if(cbin(s,i,1,N)!=-1)
{
gasit=1;
out<<cbin(s,i,1,N)<<'\n';
}
if(!gasit)
out<<-1<<'\n';
}
if(t[i].abs==2)
{
bool gasit=0;
for(i=t[i].ord;i<=s[N] && !gasit;++i)
if(cbin(s,i,1,N)!=-1)
{
gasit=1;
out<<cbin2(s,i,1,N)<<'\n';
}
if(!gasit)
out<<-1<<'\n';
}
}
return 0;
}