#include <cstdio>
using namespace std;
const int N=100000;
int v[N+1],aib[N+1];
int n;
void update(int x,int val)
{
while(x<=n)
{
aib[x]=aib[x]+val;
x+=x&(-x);
}
}
int query(int x)
{
int sum=0;
while(x>0)
{
sum=sum+aib[x];
x-=x&(-x);
}
return sum;
}
int caut(int sum)
{
int pas=1<<14,x=0;
while(pas>0)
{
if(aib[pas+x]<=sum && aib[pas+x]!=0)
{
sum=sum-aib[pas+x];
x=x+pas;
}
pas=pas/2;
}
if(sum==0)
return x;
else
return -1;
}
int main()
{
FILE *in,*out;
in=fopen("aib.in","r");
out=fopen("aib.out","w");
int m,i,j,x,cod,a,b,ras,val,sum;
fscanf(in,"%d%d",&n,&m);
for(i=1;i<=n;i++)
{
fscanf(in,"%d",&val);
update(i,val);
}
for(i=1;i<=m;i++)
{
fscanf(in,"%d",&cod);
if(cod==0)
{
fscanf(in,"%d%d",&a,&b);
update(a,b);
}
if(cod==1)
{
fscanf(in,"%d%d",&a,&b);
sum=query(b)-query(a-1);
fprintf(out,"%d\n",sum);
}
if(cod==2)
{
fscanf(in,"%d",&a);
ras=caut(a);
fprintf(out,"%d\n",ras);
}
}
return 0;
}