#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 5;
int n, q;
int a[maxn];
void input() {
  cin >> n >> q;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
}
int nxt[maxn][35], lst[35];
void init() {
  memset(nxt, 0x3f3f3f3f, sizeof nxt);
  for (int i = n; i >= 1; i--) {
    for (int j = 0; j <= 30; j++) {
      if ((a[i] >> j) & 1) {
        nxt[i][j] = i;
        if (lst[j]) {
          for (int k = 0; k <= 30; k++) {
            nxt[i][k] = min(nxt[i][k], nxt[lst[j]][k]);
          }
        }
        lst[j] = i;
      }
    }
  }
}
bool slove(int l, int r) {
  for (int i = 0; i <= 30; i++) {
    if ((a[r] >> i) & 1) {
      if (nxt[l][i] <= r) return true;
    }
  }
  return false;
}
void work() {
  init();
  while (q--) {
    int l, r;
    cin >> l >> r;
    if (slove(l, r))
      cout << "Shi" << endl;
    else
      cout << "Fou" << endl;
  }
  return;
}
int main() {
  input();
  work();
  return 0;
}
