#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200000 + 10;
int ch[MAXN * 10][30];
int val[MAXN * 10];
int sz = 1;
void insert(char s[]) {
  int n = strlen(s);
  int u = 0;
  for (int i = 0; i < n; i++) {
    int c = s[i] - 'a';
    if (!ch[u][c]) {
      val[sz] = 0;
      memset(ch[sz], 0, sizeof ch[sz]);
      ch[u][c] = sz++;
    }
    u = ch[u][c];
  }
  val[u]++;
}
int res = 0;
set<int> ss;
void query(char s[], int u, int cur, int n) {
  if (cur == n) {
    if (!ss.count(u)) res += val[u];
    ss.insert(u);
    return;
  }
  if (s[cur] == '?') {
    for (int i = 0; i <= 25; i++) {
      if (ch[u][i]) {
        query(s, ch[u][i], cur + 1, n);
      }
    }
    query(s, u, cur + 1, n);
    return;
  }
  int c = s[cur] - 'a';
  if (ch[u][c]) {
    query(s, ch[u][c], cur + 1, n);
  }
}
char s[MAXN];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%s", s);
    insert(s);
  }
  for (int i = 0; i < m; i++) {
    scanf("%s", s);
    res = 0;
    ss.clear();
    query(s, 0, 0, strlen(s));
    printf("%d\n", res);
  }
}
