#include<fstream>
#include<algorithm>
using namespace std;
unsigned int i,n,m,k,st,dr,tip,poz,x,a[100010];
unsigned int c[100010],sum,s1,s2;
inline void aduna(int poz,int sum)
{
while(poz<=n)
{
c[poz]+=sum;
poz+=(poz&-poz);
}
}
inline int rezolva(int poz)
{
int s=0;
while(poz!=0)
{
s+=c[poz];
poz-=(poz&-poz);
}
return s;
}
inline int pozitie(int st,int dr,int sum)
{
int i,mij,p;
while(st<dr)
{
mij=(st+dr)>>1;
p=rezolva(mij);
if(p==sum)
return mij;
if(p<sum)
st=mij+1;
else
dr=mij-1;
}
if(rezolva(st)==sum)
return st;
return -1;
}
int main()
{
FILE *f=fopen("aib.in","r");
FILE *g=fopen("aib.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;++i)
{
fscanf(f,"%d",&a[i]);
a[i]+=a[i-1];
c[i]=a[i]-a[i-(i&-i)];
}
for(i=1;i<=m;++i)
{
fscanf(f,"%d",&tip);
if(tip==0)
{
fscanf(f,"%d%d",&poz,&sum);
aduna(poz,sum);
}
else
if(tip==1)
{
fscanf(f,"%d%d",&st,&dr);
s1=rezolva(dr);
s2=rezolva(st-1);
fprintf(g,"%d\n",s1-s2);
}
else
if(tip==2)
{
fscanf(f,"%d",&sum);
fprintf(g,"%d\n",pozitie(1,n,sum));
}
}
return 0;
}