#pragma comment(linker,"/stack:200000000")
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100001];
double x;
inline int read() {
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int main() {
n=read();
m=read();
for (int i=1;i<=n;i++) {
a[i]=read();
}
while(m--) {
register int l,r,cnt=0,opt;
opt=read(),l=read(),r=read(),x=read();
if(opt==1) {
for (register int i=l;i<=r;i++) {
a[i]-=(a[i]>x)?x:0;
}
} else {
for (register int i=l;i<=r;i++) {
cnt+=(a[i]==x);
}
printf("%d",cnt);
cout<<endl;
}
}
return 0;
}