#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
const int NMAX = 4e5 + 40;
int n,m,aib[NMAX],sum,pos,val;
int soum[NMAX],o;
void build(int nod, int st, int dr){
if(st == dr){
f >> aib[nod];
soum[++o] = soum[o - 1] + aib[nod];
return;
}
int mid = (st + dr) / 2;
build(2 * nod, st, mid);
build(2 * nod + 1 , mid + 1, dr);
aib[nod] = aib[2 * nod] + aib[2 * nod + 1];
}
void update1(int nod, int st, int dr, int x, int y){
if(st == dr){
aib[nod] += y;
return;
}
int mid = (st + dr) / 2;
if(x <= mid){
update1(2 * nod, st, mid, x, y);
}else{
update1(2 * nod + 1, mid + 1, dr, x, y);
}
aib[nod] = aib[2 * nod] + aib[2 * nod + 1];
}
void suma(int nod, int st, int dr, int x, int y){
if(st >= x && y >= dr){
sum += aib[nod];
return;
}
int mid = (st + dr) / 2;
if(x <= mid)
suma(2 * nod, st, mid, x, y);
if(mid + 1 <= y)
suma(2 * nod + 1, mid + 1 , dr , x , y);
}
void det_pos(){
int i;
for(i = 1 ; i <= n ; i++){
if(soum[i] == val)
pos = i, i = n + 5;
}
}
int main(){
int i,a,b,cer;
f >> n >> m;
build(1,1,n);
for(i = 1 ; i <= m ; i++){
f >> cer;
if(cer == 0){
f >> a >> b;
update1(1,1,n,a,b);
for(int j = a ; j <= n ; j++)
soum[j] += b;
}else
if(cer == 1){
f >> a >> b;
sum = 0;
suma(1,1,n,a,b);
g << sum << "\n";
}else{
f >> a;
val = a;
pos = -1;
det_pos();
g << pos << "\n";
}
}
//for(i = 1 ; i <= 4 * n ; i++)
//g << aib[i] << " ";
return 0;
}