#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
void minimize(T& a, const T& b) {
if (b < a) a = b;
}
int n, m;
string s;
int adj[20][20]; // adj[c1][c2] = Số vị trí mà hai chữ cái c1 và c2 nằm kề nhau trong xâu s
int dp[1 << 20]; // dp[mask] = Độ trễ tối thiểu có thể có khi đặt các chữ cái trong mask
// vào các vị trí từ 0 đến popcount(mask) - 1 trên bàn phím
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
cin >> s;
for (int i = 0; i + 1 < n; i++) {
int c1 = s[i] - 'a', c2 = s[i + 1] - 'a';
adj[c1][c2]++;
adj[c2][c1]++;
}
for (int mask = 0; mask < (1 << m); mask++) {
if (mask == 0) {
dp[mask] = 0;
continue;
}
dp[mask] = INF;
int pos = __builtin_popcount(mask) - 1;
for (int c = 0; c < m; c++) { // Chữ cái được đặt vào vị trí pos
if (!(mask & (1 << c))) continue;
int prev_mask = mask ^ (1 << c);
int delta = 0;
for (int c1 = 0; c1 < m; c1++) {
if (c1 == c) continue;
if ((prev_mask >> c1) & 1) {
delta += adj[c][c1] * pos;
}
else {
delta -= adj[c][c1] * pos;
}
}
minimize(dp[mask], dp[prev_mask] + delta);
}
}
cout << dp[(1 << m) - 1] << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIGEgPSBiOyAKfQoKaW50IG4sIG07ICAKc3RyaW5nIHM7ICAKaW50IGFkalsyMF1bMjBdOyAvLyBhZGpbYzFdW2MyXSA9IFPhu5EgduG7iyB0csOtIG3DoCBoYWkgY2jhu68gY8OhaSBjMSB2w6AgYzIgbuG6sW0ga+G7gSBuaGF1IHRyb25nIHjDonUgcwppbnQgZHBbMSA8PCAyMF07IC8vIGRwW21hc2tdID0gxJDhu5kgdHLhu4UgdOG7kWkgdGhp4buDdSBjw7MgdGjhu4MgY8OzIGtoaSDEkeG6t3QgY8OhYyBjaOG7ryBjw6FpIHRyb25nIG1hc2sgCgkJCSAgICAgLy8gICAgICAgICAgICB2w6BvIGPDoWMgduG7iyB0csOtIHThu6sgMCDEkeG6v24gcG9wY291bnQobWFzaykgLSAxIHRyw6puIGLDoG4gcGjDrW0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuID4+IG07IAoJY2luID4+IHM7IAoKCWZvciAoaW50IGkgPSAwOyBpICsgMSA8IG47IGkrKykgewoJCWludCBjMSA9IHNbaV0gLSAnYScsIGMyID0gc1tpICsgMV0gLSAnYSc7IAoJCWFkaltjMV1bYzJdKys7IAoJCWFkaltjMl1bYzFdKys7IAoJfQoKCWZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgKDEgPDwgbSk7IG1hc2srKykgewoJCWlmIChtYXNrID09IDApIHsKCQkJZHBbbWFza10gPSAwOyAKCQkJY29udGludWU7IAoJCX0KCQlkcFttYXNrXSA9IElORjsgCgkJaW50IHBvcyA9IF9fYnVpbHRpbl9wb3Bjb3VudChtYXNrKSAtIDE7IAoJCWZvciAoaW50IGMgPSAwOyBjIDwgbTsgYysrKSB7IC8vIENo4buvIGPDoWkgxJHGsOG7o2MgxJHhurd0IHbDoG8gduG7iyB0csOtIHBvcwoJCQlpZiAoIShtYXNrICYgKDEgPDwgYykpKSBjb250aW51ZTsgCgkJCWludCBwcmV2X21hc2sgPSBtYXNrIF4gKDEgPDwgYyk7IAoJCQlpbnQgZGVsdGEgPSAwOyAgCgkJCWZvciAoaW50IGMxID0gMDsgYzEgPCBtOyBjMSsrKSB7CgkJCQlpZiAoYzEgPT0gYykgY29udGludWU7ICAgCgkJCQlpZiAoKHByZXZfbWFzayA+PiBjMSkgJiAxKSB7CgkJCQkJZGVsdGEgKz0gYWRqW2NdW2MxXSAqIHBvczsgIAoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJZGVsdGEgLT0gYWRqW2NdW2MxXSAqIHBvczsgCgkJCQl9CgkJCX0KCQkJbWluaW1pemUoZHBbbWFza10sIGRwW3ByZXZfbWFza10gKyBkZWx0YSk7IAoJCX0KCX0KCgljb3V0IDw8IGRwWygxIDw8IG0pIC0gMV0gPDwgJ1xuJzsgCn0K