#include <bits/stdc++.h>
using namespace std;
void dfs(int N, int M, const vector<vector<int>> &cnt1, vector<int> &cnt2,
int idx, int sum, int toy)
{
if (toy == M) {
cnt2[idx] = sum;
return;
}
dfs(N, M, cnt1, cnt2, idx, sum, toy + 1);
idx |= (1 << toy);
sum += cnt1[toy][N];
dfs(N, M, cnt1, cnt2, idx, sum, toy + 1);
}
int main()
{
int N, M;
cin >> N >> M;
vector<vector<int>> cnt0(M, vector<int>(N, 0));
for (int i = 0; i < N; ++i) {
int toy;
cin >> toy;
--toy;
++cnt0[toy][i];
}
vector<vector<int>> cnt1(M, vector<int>(N + 1, 0));
for (int j = 0; j < M; ++j) {
for (int i = 0; i < N; ++i)
cnt1[j][i + 1] = cnt1[j][i] + cnt0[j][i];
}
vector<int> cnt2(1 << M, 0);
dfs(N, M, cnt1, cnt2, 0, 0, 0);
vector<int> dp(1 << M, N + 1);
dp[0] = 0;
for (int i = 0; i < (1 << M); ++i) {
bitset<20> bi(i);
int dp_i = dp[i];
int c2i = cnt2[i];
for (int j = 0; j < M; ++j) {
if (bi.test(j))
continue;
int k = i | (1 << j);
int c2k = cnt2[k];
int dp_k = dp_i + c2k - c2i - (cnt1[j][c2k] - cnt1[j][c2i]);
if (dp[k] > dp_k)
dp[k] = dp_k;
}
}
int all((1 << M) - 1);
cout << dp[all] << endl;
}