#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define BIT(n) ((1ll) << (n))
#define bit(mask, i) (((mask) >> (i)) & 1)
using namespace std;
struct Segment_Tree
{
struct Node
{
int mn, cnt, lazy;
Node(int mn = 0, int cnt = 0, int lazy = 0) :
mn(mn), cnt(cnt), lazy(lazy) {};
Node operator + (const Node &other) const
{
Node ans;
ans.mn = min(mn, other.mn);
ans.cnt = (ans.mn == mn ? cnt : 0) + (ans.mn == other.mn ? other.cnt : 0);
return ans;
}
};
int n;
vector<Node> tree;
Segment_Tree(int n = 0) : n(n)
{
if (!n)
return ;
tree.assign(4 * n + 10, Node(0, 0, 0));
build(1, 1, n);
}
void build(int id, int l, int r)
{
if (l == r)
return tree[id] = Node(0, 1, 0), void();
int m = l + r >> 1;
build(id << 1, l, m);
build(id << 1 | 1, m + 1, r);
tree[id] = tree[id << 1] + tree[id << 1 | 1];
}
void push(int id)
{
if (tree[id].lazy == 0)
return ;
for (int i = 2 * id; i <= 2 * id + 1; i++)
tree[i] = Node(tree[i].mn + tree[id].lazy, tree[i].cnt, tree[i].lazy + tree[id].lazy);
tree[id].lazy = 0;
}
void update(int id, int l, int r, int u, int v, int val)
{
if (r < u || l > v)
return ;
if (u <= l && r <= v)
return tree[id] = Node(tree[id].mn + val, tree[id].cnt, tree[id].lazy + val), void();
int m = l + r >> 1;
push(id);
update(id << 1, l, m, u, v, val);
update(id << 1 | 1, m + 1, r, u, v, val);
tree[id] = tree[id << 1] + tree[id << 1 | 1];
}
int get()
{
if (tree[1].mn)
return n;
return n - tree[1].cnt;
}
void Print_Tree(int id, int l, int r)
{
if (l == r)
return cout << tree[id].mn << ' ', void();
int m = l + r >> 1;
Print_Tree(id << 1, l, m);
Print_Tree(id << 1 | 1, m + 1, r);
}
};
const int maxn = 1e5;
const int maxai = 1e6;
int n, k, a[maxn + 10], lst[maxai + 10], pre[maxn + 10];
ll ans = 0;
Segment_Tree st;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("COUNT.INP", "r"))
{
freopen("COUNT.INP", "r", stdin);
freopen("COUNT.OUT", "w", stdout);
}
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
pre[i] = lst[a[i]];
lst[a[i]] = i;
}
for (int mask = 1; mask < BIT(k); mask++)
{
st = Segment_Tree(n);
for (int i = 1; i <= n; i++)
{
int cur = i;
for (int k = 0; k < 4; k++)
{
if (bit(mask, k))
{
st.update(1, 1, n, pre[cur] + 1, cur, 1);
if (pre[cur])
st.update(1, 1, n, pre[pre[cur]] + 1, pre[cur], -1);
}
cur = pre[cur];
if (cur == 0)
break;
}
if (__builtin_popcount(mask) & 1)
ans += st.get();
else
ans -= st.get();
// st.Print_Tree(1, 1, n);
// el;
}
}
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIEJJVChuKSAoKDFsbCkgPDwgKG4pKQojZGVmaW5lIGJpdChtYXNrLCBpKSAoKChtYXNrKSA+PiAoaSkpICYgMSkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgU2VnbWVudF9UcmVlCnsKICAgIHN0cnVjdCBOb2RlCiAgICB7CiAgICAgICAgaW50IG1uLCBjbnQsIGxhenk7CgogICAgICAgIE5vZGUoaW50IG1uID0gMCwgaW50IGNudCA9IDAsIGludCBsYXp5ID0gMCkgOgogICAgICAgICAgICBtbihtbiksIGNudChjbnQpLCBsYXp5KGxhenkpIHt9OwogICAgICAgIE5vZGUgb3BlcmF0b3IgKyAoY29uc3QgTm9kZSAmb3RoZXIpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICBOb2RlIGFuczsKICAgICAgICAgICAgYW5zLm1uID0gbWluKG1uLCBvdGhlci5tbik7CiAgICAgICAgICAgIGFucy5jbnQgPSAoYW5zLm1uID09IG1uID8gY250IDogMCkgKyAoYW5zLm1uID09IG90aGVyLm1uID8gb3RoZXIuY250IDogMCk7CiAgICAgICAgICAgIHJldHVybiBhbnM7CiAgICAgICAgfQogICAgfTsKCiAgICBpbnQgbjsKICAgIHZlY3RvcjxOb2RlPiB0cmVlOwoKICAgIFNlZ21lbnRfVHJlZShpbnQgbiA9IDApIDogbihuKQogICAgewogICAgICAgIGlmICghbikKICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICB0cmVlLmFzc2lnbig0ICogbiArIDEwLCBOb2RlKDAsIDAsIDApKTsKICAgICAgICBidWlsZCgxLCAxLCBuKTsKICAgIH0KCiAgICB2b2lkIGJ1aWxkKGludCBpZCwgaW50IGwsIGludCByKQogICAgewogICAgICAgIGlmIChsID09IHIpCiAgICAgICAgICAgIHJldHVybiB0cmVlW2lkXSA9IE5vZGUoMCwgMSwgMCksIHZvaWQoKTsKICAgICAgICBpbnQgbSA9IGwgKyByID4+IDE7CiAgICAgICAgYnVpbGQoaWQgPDwgMSwgbCwgbSk7CiAgICAgICAgYnVpbGQoaWQgPDwgMSB8IDEsIG0gKyAxLCByKTsKICAgICAgICB0cmVlW2lkXSA9IHRyZWVbaWQgPDwgMV0gKyB0cmVlW2lkIDw8IDEgfCAxXTsKICAgIH0KICAgIHZvaWQgcHVzaChpbnQgaWQpCiAgICB7CiAgICAgICAgaWYgKHRyZWVbaWRdLmxhenkgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICBmb3IgKGludCBpID0gMiAqIGlkOyBpIDw9IDIgKiBpZCArIDE7IGkrKykKICAgICAgICAgICAgdHJlZVtpXSA9IE5vZGUodHJlZVtpXS5tbiArIHRyZWVbaWRdLmxhenksIHRyZWVbaV0uY250LCB0cmVlW2ldLmxhenkgKyB0cmVlW2lkXS5sYXp5KTsKICAgICAgICB0cmVlW2lkXS5sYXp5ID0gMDsKICAgIH0KICAgIHZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYsIGludCB2YWwpCiAgICB7CiAgICAgICAgaWYgKHIgPCB1IHx8IGwgPiB2KQogICAgICAgICAgICByZXR1cm4gOwogICAgICAgIGlmICh1IDw9IGwgJiYgciA8PSB2KQogICAgICAgICAgICByZXR1cm4gdHJlZVtpZF0gPSBOb2RlKHRyZWVbaWRdLm1uICsgdmFsLCB0cmVlW2lkXS5jbnQsIHRyZWVbaWRdLmxhenkgKyB2YWwpLCB2b2lkKCk7CiAgICAgICAgaW50IG0gPSBsICsgciA+PiAxOwogICAgICAgIHB1c2goaWQpOwogICAgICAgIHVwZGF0ZShpZCA8PCAxLCBsLCBtLCB1LCB2LCB2YWwpOwogICAgICAgIHVwZGF0ZShpZCA8PCAxIHwgMSwgbSArIDEsIHIsIHUsIHYsIHZhbCk7CiAgICAgICAgdHJlZVtpZF0gPSB0cmVlW2lkIDw8IDFdICsgdHJlZVtpZCA8PCAxIHwgMV07CiAgICB9CiAgICBpbnQgZ2V0KCkKICAgIHsKICAgICAgICBpZiAodHJlZVsxXS5tbikKICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgcmV0dXJuIG4gLSB0cmVlWzFdLmNudDsKICAgIH0KICAgIHZvaWQgUHJpbnRfVHJlZShpbnQgaWQsIGludCBsLCBpbnQgcikKICAgIHsKICAgICAgICBpZiAobCA9PSByKQogICAgICAgICAgICByZXR1cm4gY291dCA8PCB0cmVlW2lkXS5tbiA8PCAnICcsIHZvaWQoKTsKICAgICAgICBpbnQgbSA9IGwgKyByID4+IDE7CiAgICAgICAgUHJpbnRfVHJlZShpZCA8PCAxLCBsLCBtKTsKICAgICAgICBQcmludF9UcmVlKGlkIDw8IDEgfCAxLCBtICsgMSwgcik7CiAgICB9Cn07Cgpjb25zdCBpbnQgbWF4biA9IDFlNTsKY29uc3QgaW50IG1heGFpID0gMWU2OwoKaW50IG4sIGssIGFbbWF4biArIDEwXSwgbHN0W21heGFpICsgMTBdLCBwcmVbbWF4biArIDEwXTsKbGwgYW5zID0gMDsKU2VnbWVudF9UcmVlIHN0OwoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3BlbigiQ09VTlQuSU5QIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKCJDT1VOVC5JTlAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJDT1VOVC5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IG4gPj4gazsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgICAgICBwcmVbaV0gPSBsc3RbYVtpXV07CiAgICAgICAgbHN0W2FbaV1dID0gaTsKICAgIH0KCiAgICBmb3IgKGludCBtYXNrID0gMTsgbWFzayA8IEJJVChrKTsgbWFzaysrKQogICAgewogICAgICAgIHN0ID0gU2VnbWVudF9UcmVlKG4pOwoKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgY3VyID0gaTsKICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA0OyBrKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChiaXQobWFzaywgaykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3QudXBkYXRlKDEsIDEsIG4sIHByZVtjdXJdICsgMSwgY3VyLCAxKTsKICAgICAgICAgICAgICAgICAgICBpZiAocHJlW2N1cl0pCiAgICAgICAgICAgICAgICAgICAgICAgIHN0LnVwZGF0ZSgxLCAxLCBuLCBwcmVbcHJlW2N1cl1dICsgMSwgcHJlW2N1cl0sIC0xKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGN1ciA9IHByZVtjdXJdOwogICAgICAgICAgICAgICAgaWYgKGN1ciA9PSAwKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChfX2J1aWx0aW5fcG9wY291bnQobWFzaykgJiAxKQogICAgICAgICAgICAgICAgYW5zICs9IHN0LmdldCgpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBhbnMgLT0gc3QuZ2V0KCk7Ci8vICAgICAgICAgICAgc3QuUHJpbnRfVHJlZSgxLCAxLCBuKTsKLy8gICAgICAgICAgICBlbDsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8IGFuczsKfQo=