#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
long long n, m, i, j, x, y, p, tip, s, l, r, nr;
pair<long long,long long> v[300005];
long long val[300005];
void fa_perechi(long long nod)
{
if(nod<p)
{
fa_perechi(2*nod);
fa_perechi(2*nod+1);
v[nod].first=v[2*nod].first;
v[nod].second=v[2*nod+1].second;
val[nod]=val[2*nod]+val[2*nod+1];
}
}
void fa_0(long long nod, long long poz, long long x)
{
if(v[nod].first==poz&&v[nod].second==poz)
{
val[nod]+=x;
}
else if(v[nod].first<=poz&&v[nod].second>=poz)
{
fa_0(nod*2,poz,x);
fa_0(nod*2+1,poz,x);
val[nod]=val[nod*2]+val[nod*2+1];
}
}
void fa_1(long long nod, long long l, long long r)
{
if (v[nod].first>=l&&v[nod].second<=r)s+=val[nod];
else if((v[nod].first<=l&&v[nod].second>=r)||(v[nod].first>=l&&v[nod].first<=r&&v[nod].second>r)||(v[nod].second<=r&&v[nod].second>=l&&v[nod].first<l))
{
fa_1(nod*2,l,r);
fa_1(nod*2+1,l,r);
}
}
long long fa_2(long long nod, long long scaut, long long asociat, int s)
{
/// asociat=p la inceput
if(s+val[nod]>scaut)
{
if(asociat==1)
return -1;
fa_2(nod*2,scaut,asociat/2,s);
}
else if(s+val[nod]<scaut)
{
nr+=min(asociat,n);
fa_2(nod+1,scaut,asociat,s+val[nod]);
}
else return nr+min(asociat,n);
}
int main()
{
fin>>n>>m;
p=1;
while(p<n)
{
p*=2;
}
for(i=p;i<=p+n-1;i++)
fin>>val[i],v[i].second=v[i].first=i-p+1;
for(i=p+n;i<p*2;i++)
v[i].first=v[i].second=i-p+1;
fa_perechi(1);
for(i=1;i<=p*2;i++)
v[i].second=min(v[i].second,n);
fout<<p<<'\n';
for(j=1;j<=m;j++)
{
fin>>tip;
if(tip==2)
{
s=0,nr=0;
fin>>x;
if(x>val[1])
{
fout<<-1;
continue;
}
fout<<fa_2(1,x,p,s)<<'\n';
// fin>>x;
// fa_2(x);
}
else if(tip==1)
{
fin>>l>>r;
s=0;
fa_1(1,l,r);
fout<<s<<'\n';
}
else
{
fin>>l>>r;
fa_0(1,l,r);
// fout<<'\n';
//for(i=1;i<=p*2;i++)
//fout<<i<<' '<<val[i]<<' '<<v[i].first<<' '<<v[i].second<<'\n';
// fout<<'\n';
}
}
return 0;
}