#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
long long MOD = 1000000007;
long double EPS = 1e-9;
long long binpow(long long b, long long p, long long mod) {
  long long ans = 1;
  b %= mod;
  for (; p; p >>= 1) {
    if (p & 1) ans = ans * b % mod;
    b = b * b % mod;
  }
  return ans;
}
void pre() {}
int inteact[21][21];
int cost[(1 << 20)];
int dp[(1 << 20)];
int logg[(1 << 20)];
void solve() {
  long long n, m;
  cin >> n >> m;
  string s;
  cin >> s;
  for (long long i = 1; i <= n - 1; ++i) {
    long long x = s[i - 1] - 'a';
    long long y = s[i] - 'a';
    if (x > y) swap(x, y);
    inteact[x][y]++;
    inteact[y][x]++;
  }
  for (long long i = 0; i < (m); ++i) {
    logg[(1 << i)] = i;
  }
  for (long long mask = 0; mask <= (1 << m) - 1; ++mask) {
    long long t1 = mask;
    while (t1) {
      long long cur = t1 & (-t1);
      int i = logg[cur];
      long long t2 = ((1 << m) - 1) ^ mask;
      while (t2) {
        long long cur2 = t2 & (-t2);
        int i2 = logg[cur2];
        cost[mask] += inteact[i][i2];
        t2 = t2 & (t2 - 1);
      }
      t1 = t1 & (t1 - 1);
    }
  }
  for (long long j = 0; j < ((1 << m)); ++j) dp[j] = MOD;
  dp[0] = 0;
  for (long long mask = 0; mask <= (1 << m) - 1; ++mask) {
    if (dp[mask] >= MOD) continue;
    for (long long j = 0; j < (m); ++j) {
      if ((mask & (1LL << j)) == 0) {
        (dp[mask | (1LL << j)] = min((dp[mask | (1LL << j)]),
                                     (dp[mask] + cost[mask | (1LL << j)])));
      }
    }
  }
  cout << dp[(1 << m) - 1] << '\n';
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  pre();
  long long _t = 1;
  for (long long i = 1; i <= _t; i++) {
    solve();
  }
}
