#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  int n, m;
  cin >> n >> m;
  string s;
  cin >> s;
  int matx[m + 3][m + 3];
  for (int i = 0; i < m + 3; i++)
    for (int j = 0; j < m + 3; j++) matx[i][j] = 0;
  for (int i = 1; i < n; i++) {
    matx[s[i] - 'a'][s[i - 1] - 'a']++;
    matx[s[i - 1] - 'a'][s[i] - 'a']++;
  }
  int pow[m + 3];
  pow[0] = 1;
  for (int i = 1; i < m + 3; i++) pow[i] = pow[i - 1] * 2;
  int x = pow[m - 1] * 2;
  int msk[m + 2][x + 3], msksz[m + 3];
  int sum[x + 3];
  for (int i = 0; i < x; i++) {
    msksz[i] = 0;
    sum[i] = 0;
  }
  for (int i = 1; i < x; i++) {
    int p = i, y = 0;
    int x1 = 0, x2 = 0;
    int a[m], b[m];
    while (p > 0) {
      if (p % 2 == 1) {
        b[x2] = y;
        x2++;
      } else {
        a[x1] = y;
        x1++;
      }
      p /= 2;
      y++;
    }
    while (y < m) {
      a[x1] = y;
      y++;
      x1++;
    }
    for (int i1 = 0; i1 < x2; i1++)
      for (int j = 0; j < x1; j++) sum[i] += matx[b[i1]][a[j]];
  }
  vector<int> a;
  vector<int> b;
  for (int i = 0; i < x; i++) {
    int p = i, y = 0;
    while (p > 0) {
      y += p % 2;
      a.push_back(p % 2);
      p /= 2;
    }
    msk[y][msksz[y]] = i;
    msksz[y]++;
    while (a.size() < m) a.push_back(0);
    for (int j = 0; j < a.size(); j++)
      if (a[j] > 0) b.push_back(j);
    a.clear();
    b.clear();
  }
  int dp[x + 3];
  for (int i = 0; i < x; i++) dp[i] = 22 * n;
  dp[0] = 0;
  for (int i = 1; i <= m; i++)
    for (int j = 0; j < msksz[i]; j++)
      for (int v = 0; v < m; v++) {
        int p = pow[v];
        int z = msk[i][j];
        p &= z;
        if (p == pow[v]) dp[z] = min(dp[z], dp[z - p] + sum[z]);
      }
  cout << dp[x - 1] << "\n";
}
