#include <bits/stdc++.h>
using namespace std;
#define mem(x) memset(x, 0, sizeof x)
#define all(x) (x).begin(), (x).end()
#define endl "\n"
typedef long long ll;
inline ll rint() { ll x = 0, f = 1; char c = getchar(); while (c<'0' || c>'9') { if (c == '-')f = -1; c = getchar(); }while (c >= '0'&&c <= '9') { x = x * 10 + c - '0'; c = getchar(); }return x * f; }
inline ll gcd(ll a, ll b) { return (b) ? gcd(b, a%b) : a; }
inline ll lcm(ll a, ll b) { return a / gcd(a, b)*b; }
inline ll pow(ll a, ll b, ll q) { ll rtn = 1; while (b) { if (b & 1) rtn = rtn * a%q; a = a * a%q; b >>= 1; } return rtn; }
inline ll mysqrt(ll n) { ll x = sqrt(n); while (x*x < n) x++; while (x*x > n) x--; return x; }

void calc(int n, vector<ll> cnt, ll x, ll k) {
  // 判全拆不够
  ll tot = 0;
  for(ll i=0;i<n;i++) tot+=cnt[i]*(1LL<<i);
  if(tot<k) {cout<<-1<<endl; return;}

  // 算当前够不够
  tot = 0;
  for(ll i=0;i<=x;i++) tot+=cnt[i];
  if(tot>=k) {cout<<0<<endl; return;}
  k-=tot;

  // 一个x+1->x 可以1花费+2贡献
  // 一个x+2->x 可以3花费+4贡献
  // 一个x+3->x 可以7花费+8贡献
  // 小于等于x的数->x-1 每个1花费+1贡献
  // 所以x+1开始往大贪更优

  // 算小于等于x的数可以额外提供多少贡献
  ll num=0;
  for(int i=0;i<=x;i++) num+=cnt[i]*((1ll<<i)-1);

  ll res=0;
  for(int i=x+1;i<n;i++){
    // 当前够了->往前取
    if(cnt[i]*(1ll<<(i-x))>=k){
      res+=k/(1ll<<(i-x))*((1ll<<(i-x))-1);
      num+=k/(1ll<<(i-x))*(1ll<<(i-x))*((1ll<<x)-1);
      k-=k/(1ll<<(i-x))*(1ll<<(i-x));

      for(int j=i;j>x&&k>0;j--){
        if((1ll<<(j-1-x))<=k){
          res+=(1ll<<(j-1-x));
          num+=(1ll<<(j-1-x))*((1ll<<x)-1);
          k-=(1ll<<(j-1-x));
        }
        else{
          if(num>=k){res+=k;break;}
          else res++; //拆一个
        }
      }
      cout<<res<<endl;
      return;
    }

    // 全改x也不够->全改x
    else{
      res+=cnt[i]*((1ll<<(i-x))-1);
      num+=cnt[i]*(1ll<<(i-x))*((1ll<<x)-1);
      k-=cnt[i]*(1ll<<(i-x));
    }
  }
  // 剩下的k用num补(一定够)
  cout<<res+k<<endl;
}

void solve() {
  int n=rint(), q=rint();
  vector<ll> cnt(n);
  for(int i=0;i<n;i++) cnt[i]=rint();
  while(q--){
    ll a=rint(),x=rint(),k=rint();
    if(a==1) cnt[x]=k;
    else calc(n, cnt, x, k);
  }
}

int main() {
//  int t=rint(); while(t--) solve();
  solve();
  return 0;
}
