You are given a string S of length n with each character being one of the first m lowercase English letters. 

Calculate how many different strings T of length n composed from the first m lowercase English letters exist such that the length of LCS (longest common subsequence) between S and T is n - 1.

Recall that LCS of two strings S and T is the longest string C such that C both in S and T as a subsequence.

Input

The first line contains two numbers n and m denoting the length of string S and number of first English lowercase characters forming the character set for strings (1 ≤ n ≤ 100 000, 2 ≤ m ≤ 26).

The second line contains string S.

Output

Print the only line containing the answer.

Examples

Input

3 3
aaa


Output

6


Input

3 3
aab


Output

11


Input

1 2
a


Output

1


Input

10 9
abacadefgh


Output

789

Note

For the first sample, the 6 possible strings T are: aab, aac, aba, aca, baa, caa. 

For the second sample, the 11 possible strings T are: aaa, aac, aba, abb, abc, aca, acb, baa, bab, caa, cab.

For the third sample, the only possible string T is b.
#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1280000000")
using namespace std;
void solve();
void precalc();
clock_t start;
int testNumber = 1;
bool todo = true;
int main() {
  start = clock();
  int t = 1;
  cout.sync_with_stdio(0);
  cin.tie(0);
  precalc();
  cout.precision(10);
  cout << fixed;
  int testNum = 1;
  while (t--) {
    solve();
    ++testNumber;
  }
  return 0;
}
int binpow(int q, int w, int mod) {
  if (!w) return 1 % mod;
  if (w & 1) return q * 1LL * binpow(q, w - 1, mod) % mod;
  return binpow(q * 1LL * q % mod, w / 2, mod);
}
void precalc() {}
int gcd(int q, int w) {
  while (w) {
    q %= w;
    swap(q, w);
  }
  return q;
}
void solve() {
  long long n, m;
  cin >> n >> m;
  string s;
  cin >> s;
  long long ans = n * (m - 1);
  for (long long i = 0; i + 1 < n; ++i) {
    if (s[i] != s[i + 1]) {
      ans += (m - 1) * (n - 1 - i);
    }
  }
  for (long long i = n - 1; i > 0; --i) {
    if (s[i] != s[i - 1]) {
      ans += (m - 1) * i;
    }
  }
  long long finish = 0;
  for (long long i = 0; i + 1 < n; ++i) {
    if (s[i] == s[i + 1]) {
      continue;
    }
    finish = max(finish, i + 2);
    while (finish < n) {
      bool f;
      if ((finish - i) & 1) {
        f = s[finish] == s[i + 1];
      } else {
        f = s[finish] == s[i];
      }
      if (!f) {
        break;
      }
      ++finish;
    }
    ans -= max(0LL, finish - i - 1);
  }
  cout << ans << "\n";
}
