#include<cstdio>
using namespace std;
#define NMAX 100005
#define zero(x) ( x&(-x) )
FILE *f=fopen("aib.in","r");
FILE *g=fopen("aib.out","w");
long aib[NMAX],N,M,a,b;
void update(long x, long y)
{
for (long i=x;i<=N;i+=zero(i) )
aib[i]+=y;
}
long query(long x, long y)
{ long sum=0;
for (long i=y;i>0;i-=zero(i) )
sum+=aib[i];
return sum;
}
long cauta(long st, long dr,long a)
{
while (st<=dr)
{ long mij=(st+dr)/2;
long s=query(1,mij);
if (s==a)
return mij;
if (s>a)
dr=mij-1;
if (s<a)
st=mij+1;
}
return -1;}
int main()
{
fscanf(f,"%ld%ld",&N,&M);
for (long i=1;i<=N;i++)
{ fscanf(f,"%ld",&b);
update(i,b);
}
for (long i=1;i<=M;i++)
{ int op;
fscanf(f,"%d",&op);
if (op==0)
{ fscanf(f,"%ld%ld",&a,&b);
update(a,b);
}
if (op==1)
{ fscanf(f,"%ld%ld",&a,&b);
fprintf(g, "%ld\n" , query(1,b)-query(1,a-1) );
}
if (op==2)
{ fscanf(f,"%ld",&a);
fprintf(g,"%ld\n",cauta(1,N,a));
}
}
return 0;}