#include <bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
const int nsz = 1e5, msz = 20, msksz = (1 << msz) - 1, inf = 0x3f3f3f3f;
int n, m, to, id[msksz + 5], dp[msksz + 5], f[msz + 5][msksz + 5],
    cnt[msz + 5][msz + 5];
char s[nsz + 5];
int main() {
  scanf("%d%d%s", &n, &m, s);
  to = (1 << m) - 1;
  for (int i = 0; i < m; ++i) {
    id[1 << i] = i;
  }
  memset(dp, inf, sizeof(dp));
  dp[0] = 0;
  for (int i = 1; i <= n - 1; ++i) {
    int cur = s[i - 1] - 97, nxt = s[i] - 97;
    ++cnt[cur][nxt];
  }
  for (int i = 0; i < m; ++i) {
    for (int j = 0; j < m; ++j) {
      f[i][0] += cnt[i][j];
    }
  }
  for (int S = 1; S <= to; ++S) {
    for (int u = 0; u < m; ++u) {
      int pS = S - (S & -S), v = id[S ^ pS];
      f[u][S] = f[u][pS] - cnt[u][v];
    }
  }
  for (int S = 0; S <= to; ++S) {
    for (int u = 0; u < m; ++u) {
      if ((S >> u) & 1) continue;
      int nS = S | (1 << u), rS = to ^ nS, sum = 0;
      for (int v = 0; v < m; ++v) {
        sum += f[v][((nS >> v) & 1) ? nS : rS];
      }
      int tmp = dp[S] + sum;
      if (tmp < dp[nS]) {
        dp[nS] = tmp;
      }
    }
  }
  printf("%d\n", dp[to]);
}
