#include <bits/stdc++.h>
using namespace std;
const long long maxn = 2e5 + 7;
long long n, m, p, a[maxn];
struct node {
  long long l, r, mi, sum, lazy;
} t[maxn * 4];
struct segtree {
  void pushup(long long k) {
    t[k].mi = t[k * 2 + 1].mi;
    t[k].sum = t[k * 2].sum + t[k * 2 + 1].sum;
  }
  void pushdown(long long k) {
    if (t[k].lazy) {
      t[k * 2].lazy = t[k].lazy;
      t[k * 2 + 1].lazy = t[k].lazy;
      t[k * 2].mi = t[k].lazy;
      t[k * 2 + 1].mi = t[k].lazy;
      t[k * 2].sum = t[k].lazy * (t[k * 2].r - t[k * 2].l + 1);
      t[k * 2 + 1].sum = t[k].lazy * (t[k * 2 + 1].r - t[k * 2 + 1].l + 1);
      t[k].lazy = 0;
    }
  }
  void build(long long l, long long r, long long k = 1) {
    t[k].l = l;
    t[k].r = r;
    t[k].lazy = 0;
    if (l == r) {
      t[k].sum = a[l];
      t[k].mi = a[l];
      return;
    }
    long long mid = (l + r) / 2;
    build(l, mid, k * 2);
    build(mid + 1, r, k * 2 + 1);
    pushup(k);
  }
  void update(long long l, long long r, long long x, long long k = 1) {
    if (l <= t[k].l && t[k].r <= r) {
      t[k].sum = (t[k].r - t[k].l + 1) * x;
      t[k].lazy = x;
      t[k].mi = x;
      return;
    }
    pushdown(k);
    if (t[k * 2].r >= l) update(l, r, x, k * 2);
    if (t[k * 2 + 1].l <= r) update(l, r, x, k * 2 + 1);
    pushup(k);
  }
  long long search(long long l, long long r, long long x, long long k = 1) {
    if (t[k].mi > x || l > r) return 0;
    if (t[k].l == t[k].r) return t[k].l;
    long long res = 0;
    pushdown(k);
    if (t[k * 2].r >= l) res = search(l, r, x, k * 2);
    if (res == 0 && t[k * 2 + 1].l <= r) res = search(l, r, x, k * 2 + 1);
    pushup(k);
    return res;
  }
  long long find(long long l, long long r, long long k = 1) {
    if (t[k].mi > p || t[k].l == 0) return 0;
    if (l <= t[k].l && t[k].r <= r) {
      if (t[k].sum <= p) {
        p -= t[k].sum;
        return t[k].r - t[k].l + 1;
      }
    }
    long long ans = 0;
    pushdown(k);
    if (t[k * 2].r >= l) ans += find(l, r, k * 2);
    if (t[k * 2 + 1].l <= r) ans += find(l, r, k * 2 + 1);
    pushup(k);
    return ans;
  }
} st;
signed main() {
  scanf("%lld%lld", &n, &m);
  for (long long i = 1; i <= n; i++) scanf("%lld", &a[i]);
  st.build(1, n);
  long long op, x, y;
  while (m--) {
    scanf("%lld%lld%lld", &op, &x, &y);
    if (op == 1) {
      long long ans = st.search(1, x, y);
      if (ans) {
        st.update(ans, x, y);
      }
    } else {
      p = y;
      long long ans = st.find(x, n);
      printf("%lld\n", ans);
    }
  }
  return 0;
}
