#include <bits/stdc++.h>
using namespace std;
int n, q, c[300005], son[300005], p[300005], num[300005][30], sum[300005],
    par[300005], cnt[300005][30], h[300005], belong[300005], bad, m, x;
vector<int> G[300005];
char ch;
int get(char ch) {
  if (ch == '?') return 26;
  return ch - 'a';
}
void work(int x, int c) {
  while (x != 1) {
    int fa = par[x];
    int a, b;
    if (G[fa].size() == 2)
      a = G[fa][0], b = G[fa][1];
    else
      a = b = G[fa][0];
    if (b == x) swap(a, b);
    int lst = num[fa][c];
    num[fa][c] = max(num[a][c] + cnt[a][c], num[b][c] + cnt[b][c]);
    if (sum[fa] > h[fa] && sum[fa] + num[fa][c] - lst <= h[fa]) bad--;
    if (sum[fa] <= h[fa] && sum[fa] + num[fa][c] - lst > h[fa]) bad++;
    sum[fa] += num[fa][c] - lst;
    x = fa;
  }
}
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 2; i <= n; i++) {
    scanf("%d %c", &p[i], &ch);
    c[i] = get(ch);
    son[p[i]]++;
  }
  for (int i = n; i > 1; i--) {
    if (h[p[i]] && h[p[i]] != h[i] + 1) {
      bad = q + 1;
    }
    h[p[i]] = h[i] + 1;
  }
  belong[1] = 1;
  par[1] = 0;
  for (int i = 2; i <= n; i++) {
    if (p[i] == 1 || son[p[i]] > 1 || son[i] > 1) {
      par[i] = belong[p[i]];
      belong[i] = i;
    } else {
      par[i] = belong[p[i]];
      belong[i] = belong[p[i]];
    }
    cnt[belong[i]][c[i]]++;
  }
  for (int i = n; i >= 1; i--)
    if (belong[i] == i) {
      for (int j = 0; j < 26; j++) sum[i] += num[i][j];
      if (sum[i] > h[i]) bad++;
      for (int j = 0; j < 26; j++)
        num[par[i]][j] = max(num[par[i]][j], num[i][j] + cnt[i][j]);
      G[par[i]].push_back(i);
    }
  while (q--) {
    scanf("%d %c", &x, &ch);
    int tc = get(ch);
    if (c[x] != 26) {
      cnt[belong[x]][c[x]]--;
      work(belong[x], c[x]);
    }
    c[x] = tc;
    if (c[x] != 26) {
      cnt[belong[x]][c[x]]++;
      work(belong[x], c[x]);
    }
    if (bad) {
      printf("Fou\n");
    } else {
      printf("Shi ");
      long long ans = 0;
      for (int i = 0; i < 26; i++) {
        ans += (i + 1) * (h[1] - sum[1] + num[1][i]);
      }
      printf("%lld\n", ans);
    }
  }
}
