#include<bits/stdc++.h>
#define int long long
#define N 10000000
using namespace std;
struct node
{
int l,r;
int id;
int k;
int x;
}a[1000010];
int n,m;
int cnt[1000010];
int pos[1000010];
int sum;
int t;
int c[1000010];
int num[1000010];
int ans[1000010];
bitset<1000010>now1,now2;
inline void add(int x){if(cnt[x]++==0)now1[x]=1,now2[N-x]=1;}
inline void cel(int x){if(--cnt[x]==0)now1[x]=0,now2[N-x]=0;}
bool cmp(node a,node b)
{
return (pos[a.l]^pos[b.l])?pos[a.l]<pos[b.l]:((pos[a.l]&1)?a.r<b.r:a.r>b.r);
}
inline void write(int x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9)
{
write(x/10);
}
putchar(x%10+'0');
}
inline int read()
{
bool f=false;
int x=0;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
{
f=true;
}
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
return f?-x:x;
}
signed main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
c[i]=read();
t=sqrt(n);
for(int i=1;i<=n;i++)
pos[i]=(i-1)/t+1;
for(int i=1;i<=m;i++)
{
a[i].k=read();
a[i].l=read(),a[i].r=read();
a[i].x=read();
a[i].id=i;
}
sort(a+1,a+m+1,cmp);
int l=1,r=0;
for(int i=1;i<=m;i++)
{
while(l>a[i].l)add(c[--l]);
while(r<a[i].r)add(c[++r]);
while(l<a[i].l)cel(c[l++]);
while(r>a[i].r)cel(c[r--]);
int x=a[i].x,k=a[i].k;
switch(k)
{
case 1:
{
if((now1&(now1<<x)).any())
ans[a[i].id]=1;
break;
}
case 2:
{
if((now1&(now2>>(N-x))).any())
ans[a[i].id]=1;
break;
}
case 3:
{
for(int j=1;j*j<=x;++j)
if(!(x%j))
if(now1[j]&&now1[x/j])
{
ans[a[i].id]=1;
break;
}
break;
}
}
}
for(int i=1;i<=m;i++){
if(ans[i]==1)
{
cout<<"hana\n";
}
else
cout<<"bi\n";
}
return 0;
}