#include <bits/stdc++.h>
using namespace std;
const int rlen = 1 << 18 | 1;
char buf[rlen], *ib = buf, *ob = buf;
inline int read() {
  int ans = 0;
  char ch =
      (((ib == ob) && (ob = (ib = buf) + fread(buf, 1, rlen, stdin)), ib == ob)
           ? -1
           : *ib++);
  while (!isdigit(ch))
    ch = (((ib == ob) && (ob = (ib = buf) + fread(buf, 1, rlen, stdin)),
           ib == ob)
              ? -1
              : *ib++);
  while (isdigit(ch))
    ans = ((ans << 2) + ans << 1) + (ch ^ 48),
    ch = (((ib == ob) && (ob = (ib = buf) + fread(buf, 1, rlen, stdin)),
           ib == ob)
              ? -1
              : *ib++);
  return ans;
}
inline long long readl() {
  long long ans = 0;
  char ch =
      (((ib == ob) && (ob = (ib = buf) + fread(buf, 1, rlen, stdin)), ib == ob)
           ? -1
           : *ib++);
  while (!isdigit(ch))
    ch = (((ib == ob) && (ob = (ib = buf) + fread(buf, 1, rlen, stdin)),
           ib == ob)
              ? -1
              : *ib++);
  while (isdigit(ch))
    ans = ((ans << 2) + ans << 1) + (ch ^ 48),
    ch = (((ib == ob) && (ob = (ib = buf) + fread(buf, 1, rlen, stdin)),
           ib == ob)
              ? -1
              : *ib++);
  return ans;
}
inline int Read(char* s) {
  int top = 0;
  char ch =
      (((ib == ob) && (ob = (ib = buf) + fread(buf, 1, rlen, stdin)), ib == ob)
           ? -1
           : *ib++);
  while (!isalpha(ch))
    ch = (((ib == ob) && (ob = (ib = buf) + fread(buf, 1, rlen, stdin)),
           ib == ob)
              ? -1
              : *ib++);
  while (isalpha(ch))
    s[++top] = ch,
    ch = (((ib == ob) && (ob = (ib = buf) + fread(buf, 1, rlen, stdin)),
           ib == ob)
              ? -1
              : *ib++);
  return top;
}
const long double eps = 1e-10;
inline int sgn(long double x) { return (x > eps) - (x < -eps); }
const int mod = 1e9 + 7;
inline int add(int a, int b) { return (a += b) < mod ? a : a - mod; }
inline void Add(int& a, int b) { a = add(a, b); }
inline int dec(int a, int b) { return (a -= b) < 0 ? a + mod : a; }
inline void Dec(int& a, int b) { a = dec(a, b); }
inline int mul(int a, int b) { return (long long)a * b % mod; }
inline void Mul(int& a, int b) { a = (long long)a * b % mod; }
inline int ksm(int a, int p) {
  int ret = 1;
  for (; p; p >>= 1, Mul(a, a)) (p & 1) && (Mul(ret, a), 1);
  return ret;
}
const int N = 1e5 + 5;
int f[1 << 20 | 5], n, m;
char s[N];
int trans[25][25];
int dfs(int sta, int dep = 0) {
  if (sta == (1 << m) - 1) return 0;
  if (~f[sta]) return f[sta];
  int res = 0x3f3f3f3f;
  for (register int i = 0; i < m; ++i) {
    if (sta >> i & 1) continue;
    int t = 0;
    for (register int j = 0; j < m; ++j) {
      if (sta >> j & 1)
        t += trans[min(i, j)][max(i, j)] * (dep + 1);
      else
        t += trans[min(i, j)][max(i, j)] * (-dep - 1);
    }
    res = min(res, dfs(sta | (1 << i), dep + 1) + t);
  }
  return f[sta] = res;
}
int main() {
  n = read(), m = read();
  Read(s);
  memset(f, -1, sizeof(f));
  for (register int i = 2; i <= n; ++i) {
    if (s[i] > s[i - 1]) {
      ++trans[s[i - 1] - 'a'][s[i] - 'a'];
    }
    if (s[i] < s[i - 1]) {
      ++trans[s[i] - 'a'][s[i - 1] - 'a'];
    }
  }
  cout << dfs(0);
  return 0;
}
