#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
const int inf = 1e9 + 7;
char s[55];
int son[5000005][7];
int num[5000005], cnt, vis[5000005];
void Insert(int len) {
  int x = 1;
  for (int i = (1); i <= (len); i++) {
    int nxt = s[i] - 'a' + 1;
    if (!son[x][nxt]) son[x][nxt] = ++cnt;
    x = son[x][nxt];
  }
  num[x]++;
}
int y, cr;
int query(int x, int k) {
  if (!k) return 0;
  if (x == y + 1) {
    if (vis[k] != cr) {
      vis[k] = cr;
      return num[k];
    } else
      return 0;
  }
  if (s[x] != '?')
    return query(x + 1, son[k][s[x] - 'a' + 1]);
  else {
    int sz = 0;
    for (int i = (1); i <= (5); i++) sz += query(x + 1, son[k][i]);
    sz += query(x + 1, k);
    return sz;
  }
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  cnt = 1;
  for (int i = (1); i <= (n); i++) {
    scanf("%s", s + 1);
    int len = strlen(s + 1);
    Insert(len);
  }
  for (int i = (1); i <= (m); i++) {
    cr = i;
    scanf("%s", s + 1);
    y = strlen(s + 1);
    printf("%d\n", query(1, 1));
  }
  return 0;
}
