#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
const int N = 1e5 + 5;
vector<int> g[N];
long long dp[2][N];
long long z[2][N];
int sz[N];
map<string, int> cnt;
string t;
vector<string> ans;
void brute(int pos, string nt) {
  if (pos >= int(t.size())) {
    ans.push_back(nt);
    return;
  }
  if (t[pos] != '?') {
    brute(pos + 1, nt + t[pos]);
    return;
  }
  for (char c = 'a'; c <= 'e'; c++) {
    brute(pos + 1, nt + c);
  }
  brute(pos + 1, nt);
}
int main() {
  cout.sync_with_stdio(false);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  vector<string> s(n);
  for (int i = 0; i < n; i++) {
    cin >> s[i];
    cnt[s[i]]++;
  }
  for (int i = 0; i < m; i++) {
    cin >> t;
    ans.clear();
    brute(0, "");
    sort(ans.begin(), ans.end());
    ans.erase(unique(ans.begin(), ans.end()), ans.end());
    long long answer = 0;
    for (int i = 0; i < ans.size(); i++) {
      answer += cnt[ans[i]];
    }
    cout << answer << '\n';
  }
}
