#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
const int lg = 21;
int a[N];
int dp[N][lg];
int last[lg];
int n, q;
bool query(int x, int y) {
  int r = 0;
  for (int k = 0; k < lg; k++) {
    if ((a[x] >> k) & 1) {
      r = max(r, dp[y][k]);
    }
  }
  return r >= x;
}
int main() {
  cin >> n >> q;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    for (int k = 0; k < lg; k++) {
      if ((a[i] >> k) & 1) dp[i][k] = i;
      for (int p = 0; p < lg; p++) {
        if ((a[i] >> p) & 1) {
          dp[i][k] = max(dp[i][k], dp[last[p]][k]);
        }
      }
    }
    for (int k = 0; k < lg; k++) {
      if ((a[i] >> k) & 1) {
        last[k] = i;
      }
    }
  }
  while (q--) {
    int x, y;
    cin >> x >> y;
    if (query(x, y)) {
      puts("Shi");
    } else {
      puts("Fou");
    }
  }
}
