#include<bits/stdc++.h>
#define N 2100000
#define int long long
using namespace std;
const int mod = 1e9+7;
#define G(a) putchar(a+48)
inline void write(int s) {
if (s>9) write(s/10);
G(s%10);
}
inline int read() {
char c=getchar();
int x=0,f=1;
while(c<'0'||c>'9') {
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=(x<<3)+(x<<1)+c-'0';
c=getchar();
}
return x*f;
}
int qpow(int x, int y) {
int res = 1;
while(y) {
if(y & 1) res = 1ll * res * x % mod;
x = 1ll * x * x % mod, y >>= 1;
}
return res;
}
int ny(int x) {
return qpow(x, mod-2);
}
int lowbit(int x) {
return x & -x;
}
int n, m, a[N], power[N];
struct node {
int szsz[N];
void build() {
for(int i = 1; i <= n; i++)
if(i+lowbit(i) <= n)
szsz[i+lowbit(i)] = (szsz[i+lowbit(i)]+szsz[i]) % mod;
}
void add(int x,int val) {
if(x<=0) return;
while(x <= n) szsz[x] = (szsz[x] + val) % mod, x += lowbit(x);
}
int qzh(int x) {
int Ans = 0;
for(int i = x; i != 0; i -= lowbit(i)) Ans = (szsz[i] + Ans) % mod;
return Ans;
}
int query(int l, int r) {
return (qzh(r) - qzh(l-1) + mod) % mod;
}
} qwq;
int minn[N<<2];
void build(int L, int R, int id) {
int mid = (L+R) / 2;
if(L == R) {
minn[id] = a[L];
return;
}
build(L,mid,id*2), build(mid+1, R, id*2+1);
minn[id] = min(minn[id<<1], minn[id<<1|1]);
}
int query(int L, int R, int l, int r, int id) {
int mid = (L+R) / 2;
if(L == l && R == r) return minn[id];
else if(r <= mid) return query(L, mid, l, r, id*2);
else if(l > mid) return query(mid+1, R, l, r, id*2+1);
else return min(query(L, mid, l, mid, id*2), query(mid+1, R, mid+1, r, id*2+1));
}
void xg(int L, int R, int x, int y, int id) {
int mid = (L+R) / 2;
if(L == R) minn[id] = y;
else {
if(x <= mid) xg(L, mid, x, y, id*2);
else xg(mid+1, R, x, y, id*2+1);
minn[id] = min(minn[id*2], minn[id*2+1]);
}
}
signed main() {
power[0] = 1;
int opt, la, lb, ra, rb;
n = read(), m = read();
for(int i = 1; i <= n; ++i) power[i] = 1ll * 998244353 * power[i-1] % mod;
for(int i = 1; i <= n; ++i) a[i] = read();
for(int i = 1; i <= n; ++i) qwq.szsz[i] = 1ll * power[a[i]] % mod;
build(1, n, 1), qwq.build();
while(m--) {
opt = read();
if(opt) { // 查询
la = read(), ra = read(), lb = read(), rb = read();
int cha = query(1,n,la,ra,1); // 最低位
int chb = query(1,n,lb,rb,1); // 最低位
int ansa = qwq.query(la, ra), ansb = qwq.query(lb, rb);
ansa = 1ll * ansa * ny(power[cha]) % mod;
ansb = 1ll * ansb * ny(power[chb]) % mod;
if(ansa != ansb) printf("NO\n");
else printf("YES\n");
}
else {
la = read(), lb = read();
xg(1, n, la, lb, 1);
qwq.add(la, 1ll * (mod - 1) * power[a[la]] % mod);
a[la] = lb;
qwq.add(la, 1ll * power[a[la]] % mod);
}
}
return 0;
}