#include <stdio.h>
#include <string.h>
int v[10002],n,m;
FILE *fin=fopen("aib.in","r");
FILE *fout=fopen("aib.out","w");
void aduna()
{ int a,b;
fscanf(fin,"%d %d", &a,&b);
while (a<=n)
{
v[a]+=b;
a+=(a^(a-1)) &a;
}
}
void suma_int()
{ int a,b,j,s1,s2;
fscanf(fin,"%d %d", &a,&b);
s1=0; j=b;
while (j)
{
s1+=v[j];
j-=(j^(j-1))&j;
}
s2=0; j=a-1;
while (j)
{
s2+=v[j];
j-=(j^(j-1))&j;
}
fprintf(fout,"%d\n",s1-s2);
}
void min_k()
{ int a,gasit,j,st,dr,x,s1;
fscanf(fin,"%d", &a);
st=1;dr=n; gasit=0; x=0;
do
{
x=(dr+st)/2;
s1=0; j=x;
while (j)
{
s1+=v[j];
j-=(j^(j-1))&j;;
}
if (s1==a) {gasit=x;dr=x-1;}
else
if (s1>a) {dr=x-1;}
else {st=x+1;}
}
while (dr>=st);
if (!gasit) gasit=-1;
fprintf(fout,"%d\n",gasit);
}
int main()
{
memset(v,0,sizeof(v));
fscanf(fin,"%d %d",&n,&m);
int i,j,x,poz;
for (i=1;i<=n;i++)
{
fscanf(fin,"%d",&x);
j=i;
while (j<=n)
{
v[j]+=x;
j+=(j^(j-1))&j;
}
}
int operatie,op;
for (operatie=0;operatie<m;operatie++)
{
fscanf(fin,"%d",&op);
switch (op)
{
case 0:{ aduna(); break;}
case 1:{ suma_int(); break;}
default: { min_k();}
}
}
fclose(fin);
fclose(fout);
return 0;
}