#include <cstdio>
#define lsb(x) (x & (-x))
FILE *fin = freopen("aib.in","r",stdin); FILE *fout = freopen("aib.out","w",stdout);
const int MAX_N = 100000 + 5;
/* -------- Data -------------*/
int n,m;
int aib[MAX_N];
/* -------- Data -------------*/
void Update(int position, int val)
{
for(int i = position; i<=n; i+= lsb(i))
{
aib[i]+=val;
}
}
int Query(int position)
{
int result = 0;
for(int i = position; i> 0; i-=lsb(i))
{
result+=aib[i];
}
return result;
}
void Read_Data()
{
int x,a,b,i,op;
scanf("%d%d",&n,&m);
for(i = 1; i<= n; ++i)
{
scanf("%d",&x);
Update(i,x);
}
for(i = 1; i<= m; ++i)
{
scanf("%d",&op);
if(op == 0)
{
scanf("%d%d",&a,&b);
Update(a,b);
}
else if(op == 1)
{
scanf("%d%d",&a,&b);
printf("%d\n",Query(b)-Query(a-1));
}
else
{
scanf("%d",&a);
int pas=1,k=0;
for(;pas <=n ;pas <<=1);
for(; pas; pas >>= 1)
{
if(k+pas<=n && aib[k+pas]<=a)
{
a-=aib[k+pas];
k+=pas;
}
}
if(a==0 && k > 0)
printf("%d\n",k);
else
printf("-1\n");
}
}
}
int main()
{
Read_Data();
}