#include <fstream>
#define max_n 1<<18
using namespace std;
int i,n,m,c,a,b,s,k,x;
int v[1<<18];
ifstream in("aib.in");
ofstream out("aib.out");
void adauga(int nod, int st, int dr, int poz,int x) {
int p;
if (poz>=st && poz<=dr) {
v[nod]+=x;
p=(st+dr)/2;
if (poz==st && poz==dr) return;
if (p>=poz) adauga(nod*2,st,p,poz,x);
else adauga(nod*2+1,p+1,dr,poz,x);
}
}
void suma(int nod,int st, int dr, int a, int b) {
int p;
if (a<=st && dr<=b)
s+=v[nod];
else {
p=(st+dr)/2;
if (a<=p) suma(2*nod,st,p,a,b);
if (b>p) suma(2*nod+1,p+1,dr,a,b);
}
}
int caut_binar(int st,int dr) {
int mij;
while (st<=dr) {
mij=(st+dr)/2;
s=0;
suma(1,1,n,1,mij);
if (s==a) return mij;
if (s>a) dr=mij-1;
else st=mij+1;
}
return -1;
}
int main () {
in >> n >> m;
for (i=1; i<=n; i++) {
in >> x;
adauga(1,1,n,i,x);
}
for (i=1; i<=m; i++) {
in >> c;
if (c==0) {
in >> a >> b;
adauga(1,1,n,a,b);
}
else
if (c==1) {
in >> a >> b;
s=0;
suma(1,1,n,a,b);
out << s << '\n';
}
else {
in >> a;
k=caut_binar(1,n);
out << k << '\n';
}
}
return 0;
}