#include<cstdio>
#define ub(x) (x&(-x))
using namespace std;
int V[100010],A[100010],N,T,k,a,b,S,x,St,Poz;
inline int Qwerry(int x)
{
int S=0;
for (int i=x;i>0;i-=ub(i))
S+=A[i];
return S;
}
inline void BinSearch(int st,int dr,int S)
{
if (st>dr) return;
if (st==dr)
{
if (Qwerry(st)==S) Poz=st;
return;
}
int mij=(st+dr)/2;
int Sum=Qwerry(mij);
if (Sum==S) Poz=mij;
if (Sum>=S) BinSearch(st,mij,S);
else BinSearch(mij+1,dr,S);
}
inline void Update(int x,int p,int d)
{
for (int i=p;i<=N;i+=ub(i)) {A[i]-=d; A[i]+=x;}
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d",&N,&T);
for (int i=1;i<=N;++i)
scanf("%d",&V[i]), Update(V[i],i,0);
for (int i=1;i<=T;++i)
{
scanf("%d",&k);
if (k==0)
{
scanf("%d%d",&a,&b);
Update(b,a,0);
}
if (k==1)
{
scanf("%d%d",&a,&b);
S=Qwerry(b)-Qwerry(a-1);
printf("%d\n",S);
}
if (k==2)
{
scanf("%d",&St);
Poz=-1;
BinSearch(1,N,St);
printf("%d\n",Poz);
}
}
fclose(stdin); fclose(stdout);
return 0;
}