#include <iostream>
#include <fstream>
#define NMAX 200005
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n , m;
int aib[NMAX];
void update(int pos , int val)
{
for(int i = pos ; i <= n ; i+=i&(-i))
aib[i] += val;
}
int sum(int pos)
{
int suma = 0;
for(int i = pos ; i > 0 ; i-=i&(-i))
suma += aib[i];
return suma;
}
int cb(int val)
{
int st = 1 , dr = n;
while(st <= dr)
{
int mij = (st + dr) / 2;
int suma = sum(mij);
if(suma == val)
return mij;
else if(suma > val)
{
dr = mij - 1;
}
else
st = mij + 1;
}
return -1;
}
int main()
{
fin >> n >> m;
for(int i = 1 ; i <= n ; i++)
{
int x;
fin >> x;
update(i , x);
}
for(int i = 1 ; i <= m ; i++)
{
int a , b , q;
fin >> q;
if(q == 0)
{
fin >> a >> b;
update(a , b);
}
else if(q == 1)
{
fin >> a >> b;
fout << sum(b) - sum(a-1) << '\n';
}
else
{
fin >> a;
fout << cb(a) << '\n';
}
}
return 0;
}