/*                         _
                        _ooOoo_
                       o8888888o
                       88" . "88
                       (| -_- |)
                  .'  \\|     |//  `.
                 /  \\|||  :  |||//  \
                /  _||||| -:- |||||_  \
                |   | \\\  -  /'| |   |
                | \_|  `\`---'//  |_/ |
                \  .-\__ `-. -'__/-.  /
              ___`. .'  /--.--\  `. .'___
           ."" '<  `.___\_<|>_/___.' _> \"".
          | | :  `- \`. ;`. _/; .'/ /  .' ; |
          \  \ `-.   \_\_`. _.'_/_/  -' _.' /
===========`-.`___`-.__\ \___  /__.-'_.'_.-'================

                  Please give me AC.
*/
#include<bits/stdc++.h>
using namespace std;
#define mem(a) memset(a,0,sizeof(a))
#define INF (~(1<<31))
#define inf 0x3f3f3f3f3f3f3f3f
#define eps 1e-8
#define PI 3.141592653589793238462643383
#define lowbit(x) ((x)&(-x))
#define sqr(x) ((x)*(x))
#define pb(x) push_back(x)
#define pf(x) push_front(x)
#define all(v) (v).begin(),(v).end()
#define dbg(x,y) cout<<(x)<<" = "<<(y)<< endl;
#define per(i,a,b) for(int i = a; i >= b; --i)
#define rep(i,a,b) for(int i = a; i <= b; ++i)
#define fi first
#define se second
#define ls (rt<<1)
#define rs (rt<<1|1)
#define ll long long
#define int ll
typedef bitset<2010> bt;
typedef unsigned long long ull;
typedef complex<double> comp;
typedef pair<int,int> pii;
typedef pair<double,double> pdd;

const ll N = 2e3 + 7;
const ll M = 1e9 + 7;
const ll MAXN = 2e18 + 7;
const ll Mod = 998244353;
//const ll Mod = 1e9 + 7;

int _,i,j,k,n,m,p,s,T,t,l,r,o,u,v,w,x,y,z,ans,nex,sum,num,len,en,sx,sy,tx,ty,th,ma,mi,mod,cnt,la,op,res,flag,cas,bk,ret,mid,now,tmp,rt;
int a[N],b[N],c[N],dp[N];
char ch;
vector<int> g[N],h;
string s1,s2,s3,s4;

signed main()
{
    int T = 1;
    //scanf("%lld",&T);
    while(T--){
        scanf("%lld%lld",&n,&m);
        for(i = 0;i < n;i++) scanf("%lld",a+i),s+=(1ll<<i)*a[i];
        while(m--){
            scanf("%lld%lld%lld",&th,&x,&k);
            if(th==1){
                s-=(1ll<<x)*a[x];
                a[x]=k;
                s+=(1ll<<x)*a[x];
            }
            else{
                if(s<k){printf("-1\n");continue;}
                y=0;l=0;
                for(i = 0;i <= x;i++) y+=a[i],l+=(1ll<<i)*a[i];
                if(y>=k){printf("0\n");continue;}
                z=k-y;
                ans=k-y;
                for(i = x+1;i < n;i++){
                    if((z>>(i-x))>=a[i]) ans-=a[i],l+=(1ll<<i)*a[i],z-=(1ll<<(i-x))*a[i];
                    else{ans-=(z>>(i-x));l+=(1ll<<i)*(z>>(i-x));z-=(1ll<<(i-x))*(z>>(i-x));break;}
                }
                //dbg(i,z)
                if(l<k){
                    ans++;
                    for(j = i-1;j > x;j--){
                        tmp=1ll<<(j-x);
                        //cout << ans << " ";dbg(z,tmp)
                        if(tmp<=z){
                            ans--;
                            z-=tmp;l+=(1ll<<j);
                            if(l>=k) break;
                            else ans++;
                        }
                        else ans++;
                    }
                    if(j==x) ans--;
                }
                printf("%lld\n",ans);
            }
        }


    }
    return 0;
}


