#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
const int INFMEM = 63;
const int INF = 1061109567;
const double DINF = numeric_limits<double>::infinity();
const int MOD = 1000000007;
const int dx[8] = {1, 0, -1, 0, 1, 1, -1, -1};
const int dy[8] = {0, 1, 0, -1, 1, -1, 1, -1};
const double PI = 3.141592653589793;
inline void open(string a) {
  freopen((a + ".in").c_str(), "r", stdin);
  freopen((a + ".out").c_str(), "w", stdout);
}
inline void fasterios() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
int n, m;
char isi[100003];
int cost[21][21];
int memo[1050005];
int dp(int mask) {
  int &ret = memo[mask];
  if (ret != -1) return ret;
  if (__builtin_popcount(mask) == m) return ret = 0;
  ret = 0;
  for (int i = 0; i < m; i++) {
    for (int j = i + 1; j < m; j++) {
      bool u = ((mask >> i) & 1);
      bool v = ((mask >> j) & 1);
      if (u == v) continue;
      ret += cost[i][j];
    }
  }
  int tmp = INF;
  for (int i = 0; i < m; i++) {
    if ((mask >> i) & 1) continue;
    tmp = min(tmp, dp(mask ^ (1LL << i)));
  }
  ret += tmp;
  return ret;
}
int main() {
  fasterios();
  memset(memo, -1, sizeof(memo));
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> isi[i];
  for (int i = 1; i < n; i++) {
    int u = isi[i] - 'a';
    int v = isi[i + 1] - 'a';
    cost[u][v]++;
    cost[v][u]++;
  }
  cout << dp(0) << '\n';
  return 0;
}
