11TLE+13RE
#include<bits/stdc++.h>
using namespace std;
//#define int long long
typedef long long ll;
const ll N=1e5+10;
ll n,m,a[N],sq,l,r,t[N+5],nt[N+5];
int lst[N+5][115],res[N][115];
bitset<N+5> b,nb;
struct query{
ll l,r,x,op,bh;
bool ans;
}q[N];
bool cmp(const query &a1,const query &a2){
if(a1.l/sq==a2.l/sq) return (a1.r<a2.r)^((a1.l/sq)%2==0);
return a1.l<a2.l;
}
bool cmp2(const query &a1,const query &a2){
return a1.bh<a2.bh;
}
void push(ll x){
t[x]++;
if(t[x]==1) b.set(x);
nt[N-x]++;
if(nt[N-x]==1) nb.set(N-x);
}
void del(ll x){
t[x]--;
if(t[x]==0) b.set(x,false);
nt[N-x]--;
if(nt[N-x]==0) nb.set(N-x,false);
}
signed main(){
scanf("%lld %lld",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
for(int i=1;i<=114;i++){
for(int j=1;j<=n;j++){
lst[a[j]][i]=j;
res[j][i]=res[j-1][i];
if(a[j]%i==0&&i!=0)
res[j][i]=max(res[j][i],lst[a[j]/i][i]);
if(a[j]*i<=N)
res[j][i]=max(res[j][i],lst[a[j]*i][i]);
}
}
for(int i=1;i<=m;i++){
scanf("%lld %lld %lld %lld",&q[i].op,&q[i].l,&q[i].r,&q[i].x);
if(q[i].op==4&&q[i].x<=114){
if(res[q[i].r][q[i].x]>=q[i].l) q[i].ans=true;
else q[i].ans=false;
}
q[i].bh=i;
}
sq=sqrt(n);
sort(q+1,q+m+1,cmp);
for(int i=1;i<=m;i++){
ll nl=q[i].l,nr=q[i].r,nx=q[i].x;
while(r<nr){
push(a[++r]);
}
while(r>nr){
del(a[r--]);
}
while(l<nl){
del(a[l++]);
}
while(l>nl){
push(a[--l]);
}
if(nx==0&&q[i].op!=1){
q[i].ans=false;continue;
}
if(q[i].op==1){
if((b&(b<<nx)).any()){
q[i].ans=true;
}
else q[i].ans=false;
}
else if(q[i].op==2){
if((b&(nb>>(N-nx))).any()){
q[i].ans=true;
}
else q[i].ans=false;
}
else if(q[i].op==3){
ll flag=0;ll sqt=sqrt(nx);
for(int i=1;i<=sqt;i++){
if(nx%i!=0) continue;
if(b[i]&&b[nx/i]){
flag=1;break;
}
}
if(flag==1) q[i].ans=true;
else q[i].ans=false;
}
else if(q[i].op==4){
if(nx<=114) continue;
ll flag=0;
for(int i=1;i*nx<=N;i++){
if(b[i]&&b[i*nx]){
flag=1;break;
}
}
if(flag==1) q[i].ans=true;
else q[i].ans=false;
}
}
sort(q+1,q+m+1,cmp2);
for(int i=1;i<=m;i++){
if(q[i].ans){
puts("yuno");
}
else{
puts("yumi");
}
}
return 0;
}
/*
exSample:
100 100
*/