Recently, Norge found a string s = s_1 s_2 … s_n consisting of n lowercase Latin letters. As an exercise to improve his typing speed, he decided to type all substrings of the string s. Yes, all (n (n + 1))/(2) of them!

A substring of s is a non-empty string x = s[a … b] = s_{a} s_{a + 1} … s_{b} (1 ≤ a ≤ b ≤ n). For example, "auto" and "ton" are substrings of "automaton".

Shortly after the start of the exercise, Norge realized that his keyboard was broken, namely, he could use only k Latin letters c_1, c_2, …, c_k out of 26.

After that, Norge became interested in how many substrings of the string s he could still type using his broken keyboard. Help him to find this number.

Input

The first line contains two space-separated integers n and k (1 ≤ n ≤ 2 ⋅ 10^5, 1 ≤ k ≤ 26) — the length of the string s and the number of Latin letters still available on the keyboard.

The second line contains the string s consisting of exactly n lowercase Latin letters.

The third line contains k space-separated distinct lowercase Latin letters c_1, c_2, …, c_k — the letters still available on the keyboard.

Output

Print a single number — the number of substrings of s that can be typed using only available letters c_1, c_2, …, c_k.

Examples

Input


7 2
abacaba
a b


Output


12


Input


10 3
sadfaasdda
f a d


Output


21


Input


7 1
aaaaaaa
b


Output


0

Note

In the first example Norge can print substrings s[1…2], s[2…3], s[1…3], s[1…1], s[2…2], s[3…3], s[5…6], s[6…7], s[5…7], s[5…5], s[6…6], s[7…7].
#include <bits/stdc++.h>
using namespace std;
inline long long int modadd(long long int n, long long int m) {
  long long int sum = ((n + m) % 1000000007 + 1000000007) % 1000000007;
  return sum;
}
inline long long int modsub(long long int n, long long int m) {
  long long int diff =
      ((n - m + 1000000007) % 1000000007 + 1000000007) % 1000000007;
  return diff;
}
inline long long int modpro(long long int n, long long int m) {
  long long int pro = ((n * m) % 1000000007 + 1000000007) % 1000000007;
  return pro;
}
inline long long int pow(int x, int y) {
  long long int res = 1;
  while (y > 0) {
    if (y & 1) res = res * x;
    y = y >> 1;
    x = x * x;
  }
  return res;
}
inline long long int powmod(long long int x, long long int y) {
  long long int res = 1;
  while (y > 0) {
    if (y & 1) res = modpro(res, x);
    y = y >> 1;
    x = modpro(x, x);
  }
  return res;
}
class pr {
 public:
  long long int parent;
  long long int rank;
};
long long int find(pr subs[], long long int i) {
  if (subs[i].parent != i) subs[i].parent = find(subs, subs[i].parent);
  return subs[i].parent;
}
void Union(pr subs[], long long int x, long long int y) {
  long long int xroot = find(subs, x);
  long long int yroot = find(subs, y);
  if (subs[xroot].rank < subs[yroot].rank) {
    subs[xroot].parent = yroot;
  } else if (subs[xroot].rank > subs[yroot].rank) {
    subs[yroot].parent = xroot;
  } else {
    subs[yroot].parent = xroot;
    subs[xroot].rank++;
  }
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long int n, k;
  cin >> n >> k;
  string s;
  cin >> s;
  set<char> c;
  char b;
  for (int i = 0; i < k; i++) {
    cin >> b;
    c.insert(b);
  };
  long long int ans = 0, t = 0;
  for (int i = 0; i < n; i++) {
    if (c.find(s[i]) != c.end()) {
      t = 0;
      for (int j = i; j < n; j++) {
        if (c.find(s[j]) != c.end()) {
          t++;
          i++;
        } else {
          break;
        }
      }
      ans += t * (t + 1) / 2;
    }
  }
  cout << ans << "\n";
  return 0;
}
