#include <bits/stdc++.h>
using namespace std;
int n,m,v[100005],aib[100005],aabplm;
int lsb (int nr) {
return (nr & (-nr));
}
void build_aib () {
for(int i=1;i<=n;++i)
aib[i]=v[i]-v[i-lsb(i)];
}
void updatee (int poz, int nr) {
while(poz<=n) {
aib[poz]+=nr;
poz=poz+lsb(poz);
}
}
int querrys (int dr) {
int suma=0;
while(dr>0) {
suma+=aib[dr];
dr=dr-lsb(dr);
}
return suma;
}
int querrys1 (int nr) {
int i=0,step=1;
for(;(step<<1)<=n;step<<=1);
for(;step>0;step>>=1)
if(i+step<=n && querrys(i+step)<nr)
i+=step;
return i+1;
}
int main () {
int q,nr1,nr2;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d", &n, &m);++m;
for(int i=1;i<=n;++i)
scanf("%d", &v[i]),v[i]+=v[i-1];
build_aib();
while(--m) {
scanf("%d", &q);
if(q==0)
scanf("%d%d", &nr1, &nr2),updatee(nr1,nr2);
else if (q==1)
scanf("%d%d", &nr1, &nr2),printf("%d\n", (querrys(nr2)-querrys(nr1-1)));
else {
scanf("%d", &nr1);aabplm=nr1;nr1=querrys1(nr1);nr2=querrys(nr1);
if(nr2==aabplm)
printf("%d\n", nr1);
else
printf("-1\n");
}
}
return 0;
}