#include <stdio.h>
FILE *in, *out;
long int getInt()
{
long int a;
fscanf(in,"%lu",&a);
return a;
}
void init()
{
in = fopen("cautbin.in","r");
out = fopen("cautbin.out","w");
}
long int cautBin(long int *vec, long int len, long int x)
{
long int mid, st, dr;
st = 0;
dr = len;
do
{
mid = (st + dr)/2;
if(vec[mid] == x)
{
return mid;
}
else
{
if(vec[mid] > x)
{
dr = mid - 1;
}
else
{
st = mid + 1;
}
}
}while(st <= dr);
return -dr;
}
long int mare(long int *vec, long int x, long int pos)
{
while(1)
{
if(vec[pos+1] == x)
pos++;
else
return pos;
}
}
long int mic(long int *vec, long int x, long int pos)
{
while(1)
{
if(vec[pos-1] == x)
pos--;
else
return pos;
}
}
int main()
{
init();
long int vec[100001],i,n,m,x,tmp;
n = getInt();
for(i = 0;i < n;i++)
vec[i] = getInt();
m = getInt();
for(i = 0; i < m;i++)
{
switch(getInt())
{
case 0:
x = getInt();
tmp = cautBin(vec,n,x);
if(tmp >= 0)
fprintf(out,"%lu\n",mare(vec,x,tmp) + 1);
else
fprintf(out,"-1");
break;
case 1:
x = getInt();
tmp = cautBin(vec,n,x);
if(tmp >= 0)
fprintf(out,"%lu\n",mare(vec,x,tmp) + 1);
else
fprintf(out,"%lu\n",-tmp + 1);
break;
case 2:
x = getInt();
tmp = cautBin(vec,n,x);
if(tmp >= 0)
fprintf(out,"%lu\n",mic(vec,x,tmp) + 1);
else
fprintf(out,"%lu\n",-tmp + 2);
break;
default : fprintf(out,"-1\n");
}
}
return 0;
}