#include <bits/stdc++.h>
using namespace std;
ifstream fin("test.in");
ofstream fout("test.out");
#define cin fin
#define cout fout
/*
*/
const int NMAX=1e5+10;
int v[NMAX];
int arbore[4*NMAX];
int n, m, a, b, cond;
void init(int left, int right, int nod)
{
if(left==right)
{
arbore[nod]=v[left];
return;
}
int mij=(left+right)/2;
init(left, mij, nod*2);
init(mij+1, right, nod*2+1);
arbore[nod]=arbore[nod*2]+arbore[nod*2+1];
}
int sum(int start, int finish, int left, int right, int nod)
{
if(start<=left&&right<=finish)
return arbore[nod];
int mij=(left+right)/2;
int s=0;
if(start<=mij)
s+=sum(start, finish, left, mij, nod*2);
if(mij<finish)
s+=sum(start, finish, mij+1, right, nod*2+1);
return s;
}
void add(int pos, int val, int left, int right, int nod)
{
arbore[nod]+=val;
if(left==right)
return;
int mij=(left+right)/2;
if(pos<=mij)
add(pos, val, left, mij, nod*2);
else
add(pos, val, mij+1, right, nod*2+1);
}
int findsum(int suma, int left, int right)
{
int mij=(left+right)/2;
int auxsum=sum(1, mij, 1, n, 1);
if(auxsum>suma)
return findsum(suma, left, mij-1);
if(auxsum<suma)
return findsum(suma, mij+1, right);
return mij;
}
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++)
cin>>v[i];
init(1, n, 1);
for(int i=1; i<=m; i++)
{
cin>>cond;
if(cond==0)
{
cin>>a>>b;
add(a, b, 1, n, 1);
}
else
if(cond==1)
{
cin>>a>>b;
cout<<sum(a, b, 1, n, 1)<<"\n";
}
else
if(cond==2)
{
cin>>a;
cout<<findsum(a, 1, n)<<"\n";
}
}
return 0;
}