#include <bits/stdc++.h>
using namespace std;
inline int countBits(int &x, int m) {
  int temp = x;
  int cnt = 0;
  for (int j = 0; j < m; j++) {
    if (temp & (1 << j)) {
      cnt++;
    }
  }
  return cnt;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n, m, tempset, addedset;
  string s;
  cin >> n >> m;
  long long dp[1 << m];
  vector<int> sets[21];
  cin >> s;
  long long count[20][20];
  for (int i = 0; i < 20; i++)
    for (int j = 0; j < 20; j++) count[i][j] = 0;
  for (int i = 0; i < n - 1; i++) {
    if (s[i] != s[i + 1]) {
      count[s[i + 1] - 'a'][s[i] - 'a']++;
      count[s[i] - 'a'][s[i + 1] - 'a']++;
    }
  }
  int maxval = 1 << m;
  int temp, cnt;
  for (int i = 1; i < maxval; i++) {
    cnt = countBits(i, m);
    sets[cnt].push_back(i);
    dp[i] = 1000000000000000000LL;
  }
  sets[0].push_back(0);
  dp[0] = 0;
  int len;
  long long contribution;
  for (int i = 0; i <= m; i++) {
    len = sets[i].size();
    for (int j = 0; j < len; j++) {
      tempset = sets[i][j];
      addedset = tempset;
      for (int k = 0; k < m; k++) {
        if ((tempset & (1 << k)) == 0) {
          contribution = 0;
          for (int y = 0; y < m; y++) {
            if (y == k) continue;
            if ((tempset & (1 << y)) == 0) {
              contribution = contribution - count[k][y] * (i + 1);
            } else
              contribution = contribution + count[k][y] * (i + 1);
          }
          addedset |= 1 << k;
          dp[addedset] = min(dp[tempset] + contribution, dp[addedset]);
          addedset ^= 1 << k;
        }
      }
    }
  }
  cout << dp[sets[m][0]] << endl;
  return 0;
}
