#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
#define N 200010
namespace seg{
  ll dat[2*N];
  void init(){
      for(int i=0;i<2*N;i++)dat[i]=0;
  }
  void upd(ll l,ll r){
      l+=N,r+=N+1;
      for(ll a=l,b=r;a<b;a>>=1,b>>=1){
	  if(a&1)dat[a++]--;
	  if(b&1)dat[--b]--;
      }
  }
  ll val(ll i){
      ll res=0;
      for(i+=N;i;i>>=1){
	  res+=dat[i];
      }
      return res;
  }
};
#define X 26
queue<ll> Q[X];
int main(){
    string s; ll k;
    cin>>s>>k;
    for(int i=0;i<s.size();i++){
	Q[s[i]-'a'].push(i);
    }
    for(int i=0;i<s.size();i++){
	ll di[X];
	for(int j=0;j<X;j++){
	    if(Q[j].empty())di[j]=1e17;
	    else{
		di[j]=seg::val(Q[j].front())+Q[j].front();
	    }
	}
	ll p;
	for(p=0;p<X;p++)if(di[p]<=k)break;
	if(p==X)break;
	k-=di[p];
	seg::upd(Q[p].front()+1,s.size()-1);
	Q[p].pop();
	char z='a'+p; cout<<z;
    }
    while(1){
	ll mi=1e17,pnt=-1;
	for(int i=0;i<X;i++){
	    if(Q[i].empty())continue;
	    if(mi>Q[i].front()){
		mi=Q[i].front();
		pnt=i;
	    }
	}
	if(pnt==-1)break;
	char z='a'+pnt; cout<<z;
    }
    cout<<endl;
    return 0;
}

