#include<bits/stdc++.h>
using namespace std;
int n;
long long k;
long long a[2000005],c1[2000005],c2[2000005],times[2000005];
long long lowbit(long long x){
return x&(-x);
}
void add(int id,int num,long long c[]){
if(id<=0) return ;
for(int i=id;i<=n;i+=lowbit(i)) c[i]+=num;
return ;
}
long long ask(int pos,long long c[]){
if(pos<=0) return 0;
long long ans=0;
for(int i=pos;i>=1;i-=lowbit(i)) ans+=c[i];
return ans;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
long long ans=1145141919810,l=1,r=0,temp=0,cnt=0;
while(r<n){
if(temp<k){
r++;
if(times[a[r]]!=0){
temp-=(ask(times[a[r]]-1,c1)+(cnt-1-ask(times[a[r]]-1,c2))*times[a[r]]);
add(times[a[r]],-times[a[r]],c1);
add(times[a[r]],-1,c2);
}
if(times[a[r]]==0) cnt++;
times[a[r]]++;
add(times[a[r]],times[a[r]],c1);
add(times[a[r]],1,c2);
temp+=(ask(times[a[r]]-1,c1)+(cnt-1-ask(times[a[r]]-1,c2))*times[a[r]]);
}
while(temp>=k){
ans=min(ans,r-l+1);
l++;
temp-=(ask(times[a[l-1]]-1,c1)+(cnt-1-ask(times[a[l-1]]-1,c2))*times[a[l-1]]);
add(times[a[l-1]],-times[a[l-1]],c1);
add(times[a[l-1]],-1,c2);
if(times[a[l-1]]==0) cnt--;
else{
add(times[a[l-1]],times[a[l-1]],c1);
add(times[a[l-1]],1,c2);
temp+=(ask(times[a[l-1]]-1,c1)+(cnt-1-ask(times[a[l-1]]-1,c2))*times[a[l-1]]);
}
}
}
if(temp>=k) ans=min(ans,r-l+1);
if(ans==1145141919810) cout<<-1;
else cout<<ans;
return 0;
}
几乎要和标程一样了