1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <bits/stdc++.h>
using namespace std;

const int MAXN=5e5;

int cnt=0;
vector<int> T,pom;
bool wystapilo[MAXN+10];


void scal(int l,int s, int p){
    int i,j;

    for(i=s+1;i>l;i--)
        pom[i-1]=T[i-1];
    for(j=s;j<p;j++)
        pom[p+s-j]=T[j+1];

    for(int k=l;k<=p;k++)
        if(pom[j]<pom[i]){
            cnt+=s-i+1;
            T[k]=pom[j--];
        }
        else
            T[k]=pom[i++];

}

void mergeSort(int l,int p){
    if(l>=p)
        return;
    int s=(l+p)/2;
    mergeSort(l,s);
    mergeSort(s+1,p);
    scal(l,s,p);
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n,k,a,r=0;
    cin>>n>>k;
    pom.resize(n);

    for(int i=0;i<n;++i){
        cin>>a;
        if(!wystapilo[a] && r!=k){
            T.push_back(++r);
            wystapilo[a]=true;
        }
        else
            T.push_back(k+1);
    }
    if(r==k){
        mergeSort(0,n-1);
        cout<<cnt;
    }
    else
        cout<<-1;



    return 0;
}