#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int n, m;
int arb[1 << 18];
void actualizare(int nod, int st, int dr, int a, int b, int val)
{
if(a <= st && dr <= b)
{
arb[nod] += val;
return;
}
int mij = (st + dr) >> 1;
if(a <= mij)
actualizare(nod << 1, st, mij, a, b, val);
if(mij + 1 <= b)
actualizare((nod << 1) + 1, mij + 1, dr, a, b, val);
arb[nod] = arb[nod << 1] + arb[(nod << 1) + 1];
}
int interogare(int nod, int st, int dr, int a, int b)
{
if(a <= st && dr <= b)
return arb[nod];
int mij = (st + dr) >> 1, rez = 0;
if(a <= mij)
rez += interogare(nod << 1, st, mij, a, b);
if(mij + 1 <= b)
rez += interogare((nod << 1) + 1, mij + 1, dr, a, b);
return rez;
}
void citire()
{
in >> n >> m;
for(int i = 1; i <= n; i++)
{
int x;
in >> x;
actualizare(1, 1, n, i, i, x);
}
}
int main()
{
citire();
for(int i = 1; i <= m; i++)
{
int tip;
in >> tip;
if(tip == 2)
{
int a;
in >> a;
int j = 0, pas = 1 << 17;
while(pas)
{
if(j + pas <= n && interogare(1, 1, n, 1, j + pas) < a)
j += pas;
pas = pas >> 1;
}
if(interogare(1, 1, n, 1, j + 1) == a)
out << j + 1 << '\n';
else
out << -1 << '\n';
}
else
{
int a, b;
in >> a >> b;
if(tip == 0)
actualizare(1, 1, n, a, a, b);
else
out << interogare(1, 1, n, a, b) << '\n';
}
}
return 0;
}