#include<bits/stdc++.h>
#define int long long

using namespace std;

const int N = 1e5+5;

int n, q;
int a[N];
int tag[N<<2], maxn[N<<2], minn[N<<2];

inline int read(){
    int 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 void pushup(int p){
    maxn[p] = max(maxn[p<<1], maxn[p<<1|1]);
    minn[p] = min(minn[p<<1], minn[p<<1|1]);
}

inline void pushdown(int p){
    minn[p<<1] += tag[p];
    minn[p<<1|1] += tag[p];
    maxn[p<<1] += tag[p];
    maxn[p<<1|1] += tag[p];
    tag[p<<1] += tag[p];
    tag[p<<1|1] += tag[p];
    tag[p] = 0;
}

inline void build(int p = 1, int cl = 1, int cr = n){
    if(cl == cr){
        maxn[p] = a[cl];
        minn[p] = a[cl];
        tag[p] = 0;
        return;
    }
    int cmid = cl+cr>>1;
    build(p<<1, cl, cmid);
    build(p<<1|1, cmid+1, cr);
    pushup(p);
}

inline void update(int l, int r, int k, int p = 1, int cl = 1, int cr = n){
    if(cl >= l && cr <= r){
        //cout<<cl<<' '<<cr<<'\n';
        maxn[p] += k;
        minn[p] += k;
        tag[p] += k;
        return;
    }
    int cmid = cl+cr>>1;
    pushdown(p);
    if(l <= cmid) update(l, r, k, p<<1, cl, cmid);
    if(r > cmid) update(l, r, k, p<<1|1, cmid+1, cr);
    pushup(p);
}

inline int query(int l, int r, int x, int p = 1, int cl = 1, int cr = n){
    if(cl >= l && cr <= r && maxn[p] < x){
        //cout<<cl<<' '<<cr<<' '<<maxn[p]<< ' '<< tag[p] <<'\n';
        return cr - cl + 1;
    }
    if(cl >= l && cr <= r && minn[p] >= x){
        return 0;
    }
    if(cl == cr){
        if(maxn[p] < x) return 1;
        else return 0;
    }
    int cmid = cl+cr>>1;
    int res = 0;
    pushdown(p);
    if(l<=cmid && r>cmid) return query(l,r,x,p<<1,cl,cmid)+query(l,r,x,p<<1|1,cmid+1,cr);
    else if(r<=cmid) return query(l,r,x,p<<1,cl,cmid);
    else return query(l,r,x,p<<1|1,cmid+1,cr);
}

signed main(){
    n = read(), q = read();
    for(int i = 1; i <= n; i++) a[i] = read();
    build();
    while(q--){
        int op, l, r, x;
        op = read(), l = read(), r = read(), x = read();
        if(op == 1){
            update(l,r,x);
        }
        else{
            cout<<query(l,r,x)<<'\n';
        }
    }
    return 0;
}