#include <bits/stdc++.h>
using namespace std;
map<string, int> v;
vector<string> w;
vector<int> b;
char str[60];
void go(string &s, int i, string f) {
  if (i == b.size()) {
    int p = b.size() ? b.back() + 1 : 0;
    w.push_back(f + s.substr(p));
    return;
  }
  int p = i ? b[i - 1] + 1 : 0;
  f += s.substr(p, b[i] - p);
  for (char c = 'a'; c <= 'e'; c++) {
    go(s, i + 1, f + c);
  }
  go(s, i + 1, f);
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%s", str);
    v[string(str)]++;
  }
  for (int i = 0; i < m; i++) {
    scanf("%s", str);
    w.clear();
    b.clear();
    string a = string(str);
    for (int j = 0; j < a.size(); j++) {
      if (a[j] == '?') b.push_back(j);
    }
    go(a, 0, string());
    sort(w.begin(), w.end());
    w.resize(unique(w.begin(), w.end()) - w.begin());
    int ans = 0;
    for (int j = 0; j < w.size(); j++) {
      ans += v.count(w[j]) ? v[w[j]] : 0;
    }
    printf("%d\n", ans);
  }
  return 0;
}
