#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1000050;
ll n,k,a[N],tree[N],g[N],q,b[N],f[N];
ll l,r,mid;
ll lowbit(ll x){return x&(-x);}
ll query(ll x)
{
ll now=0;
for(int i=x;i>0;i-=lowbit(i)) now+=tree[i];
return now;
}
void add(ll x)
{
for(int i=x;i<=n+1;i+=lowbit(i))
tree[i]+=1;
return ;
}
ll shou(ll x)
{
ll now=0;
for(int i=1;i<=n;++i)
now+=min(g[i],x);
return now;
}
signed main()
{
cin>>n>>k;
for(int i=1;i<=n;++i) cin>>a[i];
for(int i=1;i<=n;++i)
{
g[i]=query(n+1)-query(a[i]);
add(a[i]);
}
l=0;r=n;
while(l<r)
{
mid=(l+r+1)/2;
if(shou(mid)>=k) r=mid-1;
else l=mid;
}
if(l==n)
{
printf("Impossible!");
return 0;
}
k-=shou(l);q=0;
for(int i=1;i<=n;++i)
if(g[i]<=l) f[++q]=a[i];
else b[i-l]=a[i];
sort(f+1,f+1+q);
q=0;
for(int i=1;i<=n;++i)
if(!b[i]) b[i]=f[++q];
for(int j=1;j<n;++j)
if(b[j]>b[j+1])
{
swap(b[j],b[j+1]);
--k;if(k==0) break;
}
for(int i=1;i<=n;++i)
printf("%lld ",b[i]);
return 0;
}
校内网测只有50 TLE