#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()
#define pb push_back
#define re exit(0);
#define FOR(i, a, b) for(int i = (a), _b = (b); i <= _b; i++)
#define FORD(i, a, b) for(int i = (a), _b = (b); i >= _b; i--)
#define LOOP(a) for(int i = 0, _a = (a); i < _a; i++)
using namespace std;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<pii> vii;
template<typename T> void chkmin(T &x, T y) {if (y < x) x = y;}
template<typename T> void chkmax(T &x, T y) {if (y > x) x = y;}
const int mod = 1e9 + 7;
void add(int &a, int b) {
a += b;
if (a >= mod) a -= mod;
if (a < 0) a += mod;
}
int _pow(int a, int b) {
int ans = 1;
while (b) {
if (b % 2 == 1) ans = 1ll * ans * a % mod;
a = 1ll * a * a % mod;
b /= 2;
}
return ans;
}
void rf() {
freopen("input.inp", "r", stdin);
}
//--------------------------------------------------------------------------------------------------------------------------------------
struct hihi {
int type, l, r, x, id;
};
const int maxn = 1e5;
int a[maxn + 5];
int n, numQuery;
int sqrt_n;
bitset<maxn> s1, s2;
int cnt[maxn + 5];
int ans[maxn + 5];
vector<hihi> queries;
bool cmp(hihi a, hihi b) {
int block_a = a.l / sqrt_n, block_b = b.l / sqrt_n;
if (block_a != block_b) return block_a < block_b;
return a.r < b.r;
}
void push(int val) {
cnt[val]++;
if (cnt[val] == 1) {
s1[val] = 1;
s2[maxn - val] = 1;
}
}
void pop(int val) {
cnt[val]--;
if (cnt[val] == 0) {
s1[val] = 0;
s2[maxn - val] = 0;
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
// rf();
cin >> n >> numQuery;
for (int i = 1; i <= n; i++)
cin >> a[i];
sqrt_n = sqrt(n);
for (int i = 1; i <= numQuery; i++) {
int type, l, r, x;
cin >> type >> l >> r >> x;
queries.push_back({type, l, r, x, i});
}
sort(all(queries), cmp);
int L = 1, R = 0;
for (hihi query : queries) {
while (L < query.l) pop (a[L++]);
while (L > query.l) push(a[--L]);
while (R < query.r) push(a[++R]);
while (R > query.r) pop (a[R--]);
int x = query.x;
if (query.type == 1)
ans[query.id] = (s1 & (s1 << x)).any();
else if (query.type == 2)
ans[query.id] = (s2 & (s1 << (maxn - x))).any();
else if (query.type == 3) {
for (int i = 1; i * i <= x; i++) {
if (x % i == 0 && s1[i] && s1[x / i]) {
ans[query.id] = 1;
break;
}
}
}
}
for (int i = 1; i <= numQuery; i++)
cout << (ans[i] ? "hana\n" : "bi\n");
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgc3ooeCkgKGludCl4LnNpemUoKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIHJlIGV4aXQoMCk7CiNkZWZpbmUgRk9SKGksIGEsIGIpICAgZm9yKGludCBpID0gKGEpLCBfYiA9IChiKTsgaSA8PSBfYjsgaSsrKQojZGVmaW5lIEZPUkQoaSwgYSwgYikgIGZvcihpbnQgaSA9IChhKSwgX2IgPSAoYik7IGkgPj0gX2I7IGktLSkKI2RlZmluZSBMT09QKGEpICAgICAgICBmb3IoaW50IGkgPSAwLCBfYSA9IChhKTsgaSA8IF9hOyBpKyspCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CnR5cGVkZWYgdmVjdG9yPHBpaT4gdmlpOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBjaGttaW4oVCAmeCwgVCB5KSB7aWYgKHkgPCB4KSB4ID0geTt9CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgY2hrbWF4KFQgJngsIFQgeSkge2lmICh5ID4geCkgeCA9IHk7fQoKY29uc3QgaW50IG1vZCA9IDFlOSArIDc7CnZvaWQgYWRkKGludCAmYSwgaW50IGIpIHsKICAgIGEgKz0gYjsKICAgIGlmIChhID49IG1vZCkgYSAtPSBtb2Q7CiAgICBpZiAoYSA8IDApIGEgKz0gbW9kOwp9CgppbnQgX3BvdyhpbnQgYSwgaW50IGIpIHsKICAgaW50IGFucyA9IDE7CiAgIHdoaWxlIChiKSB7CiAgIGlmIChiICUgMiA9PSAxKSBhbnMgPSAxbGwgKiBhbnMgKiBhICUgbW9kOwogICAgICAgIGEgPSAxbGwgKiBhICogYSAlIG1vZDsKICAgICAgICBiIC89IDI7CiAgIH0KICAgcmV0dXJuIGFuczsKfQp2b2lkIHJmKCkgewogICBmcmVvcGVuKCJpbnB1dC5pbnAiLCAiciIsIHN0ZGluKTsKfQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKc3RydWN0IGhpaGkgewogICAgaW50IHR5cGUsIGwsIHIsIHgsIGlkOwp9OwoKY29uc3QgaW50IG1heG4gPSAxZTU7CmludCBhW21heG4gKyA1XTsKaW50IG4sIG51bVF1ZXJ5OwppbnQgc3FydF9uOwoKYml0c2V0PG1heG4+IHMxLCBzMjsKaW50IGNudFttYXhuICsgNV07CmludCBhbnNbbWF4biArIDVdOwp2ZWN0b3I8aGloaT4gcXVlcmllczsKCmJvb2wgY21wKGhpaGkgYSwgaGloaSBiKSB7CiAgICBpbnQgYmxvY2tfYSA9IGEubCAvIHNxcnRfbiwgYmxvY2tfYiA9IGIubCAvIHNxcnRfbjsKICAgIGlmIChibG9ja19hICE9IGJsb2NrX2IpIHJldHVybiBibG9ja19hIDwgYmxvY2tfYjsKICAgIHJldHVybiBhLnIgPCBiLnI7Cn0KCnZvaWQgcHVzaChpbnQgdmFsKSB7CiAgICBjbnRbdmFsXSsrOwogICAgaWYgKGNudFt2YWxdID09IDEpIHsKICAgICAgICBzMVt2YWxdID0gMTsKICAgICAgICBzMlttYXhuIC0gdmFsXSA9IDE7CiAgICB9Cn0Kdm9pZCBwb3AoaW50IHZhbCkgewogICAgY250W3ZhbF0tLTsKICAgIGlmIChjbnRbdmFsXSA9PSAwKSB7CiAgICAgICAgczFbdmFsXSA9IDA7CiAgICAgICAgczJbbWF4biAtIHZhbF0gPSAwOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCi8vICAgIHJmKCk7CgogICAgY2luID4+IG4gPj4gbnVtUXVlcnk7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgIGNpbiA+PiBhW2ldOwogICAgc3FydF9uID0gc3FydChuKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBudW1RdWVyeTsgaSsrKSB7CiAgICAgICAgaW50IHR5cGUsIGwsIHIsIHg7CiAgICAgICAgY2luID4+IHR5cGUgPj4gbCA+PiByID4+IHg7CiAgICAgICAgcXVlcmllcy5wdXNoX2JhY2soe3R5cGUsIGwsIHIsIHgsIGl9KTsKICAgIH0KICAgIHNvcnQoYWxsKHF1ZXJpZXMpLCBjbXApOwoKICAgIGludCBMID0gMSwgUiA9IDA7CiAgICBmb3IgKGhpaGkgcXVlcnkgOiBxdWVyaWVzKSB7CiAgICAgICAgd2hpbGUgKEwgPCBxdWVyeS5sKSBwb3AgKGFbTCsrXSk7CiAgICAgICAgd2hpbGUgKEwgPiBxdWVyeS5sKSBwdXNoKGFbLS1MXSk7CiAgICAgICAgd2hpbGUgKFIgPCBxdWVyeS5yKSBwdXNoKGFbKytSXSk7CiAgICAgICAgd2hpbGUgKFIgPiBxdWVyeS5yKSBwb3AgKGFbUi0tXSk7CgogICAgICAgIGludCB4ID0gcXVlcnkueDsKCiAgICAgICAgaWYgKHF1ZXJ5LnR5cGUgPT0gMSkKICAgICAgICAgICAgYW5zW3F1ZXJ5LmlkXSA9IChzMSAmIChzMSA8PCB4KSkuYW55KCk7CiAgICAgICAgZWxzZSBpZiAocXVlcnkudHlwZSA9PSAyKQogICAgICAgICAgICBhbnNbcXVlcnkuaWRdID0gKHMyICYgKHMxIDw8IChtYXhuIC0geCkpKS5hbnkoKTsKICAgICAgICBlbHNlIGlmIChxdWVyeS50eXBlID09IDMpIHsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgKiBpIDw9IHg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKHggJSBpID09IDAgJiYgczFbaV0gJiYgczFbeCAvIGldKSB7CiAgICAgICAgICAgICAgICAgICAgYW5zW3F1ZXJ5LmlkXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbnVtUXVlcnk7IGkrKykKICAgICAgICBjb3V0IDw8IChhbnNbaV0gPyAiaGFuYVxuIiA6ICJiaVxuIik7CgogICAgcmV0dXJuIDA7Cn0=