#include <bits/stdc++.h>
using namespace std;
int tree[50][5], l, ans, mark;
char str[55];
unordered_map<string, int> mp, vs;
char s[55];
void dfs(int x, int y) {
  if (x > l) {
    s[y] = '\0';
    if (vs[s] != mark) ans += mp[s], vs[s] = mark;
    return;
  }
  if (str[x] == '?') {
    s[y] = 'a';
    dfs(x + 1, y + 1);
    s[y] = 'b';
    dfs(x + 1, y + 1);
    s[y] = 'c';
    dfs(x + 1, y + 1);
    s[y] = 'd';
    dfs(x + 1, y + 1);
    s[y] = 'e';
    dfs(x + 1, y + 1);
    dfs(x + 1, y);
  } else
    s[y] = str[x], dfs(x + 1, y + 1);
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%s", str + 1);
    l = strlen(str + 1);
    mp[str + 1]++;
  }
  for (int i = 1; i <= m; i++) {
    mark = i;
    scanf("%s", str + 1);
    ans = 0;
    l = strlen(str + 1);
    dfs(1, 0);
    printf("%d\n", ans);
  }
  return 0;
}
