//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
using namespace std;
const int N=5005;
char s[N],t[N],ans[N],mn,mx;int n,k;
bool cmp(char *s,char *t){
	fp(i,1,n)if(s[i]!=t[i])return s[i]<t[i];
	return false;
}
void solve(char *s,int k){
	R int now=n,len=0;
	while(now&&s[now]==mn)--now,++len;
	while(k&&len<n)len<<=1,--k;
	if(len>=n){
		fp(i,1,n)ans[i]=mn;
		printf("%s\n",ans+1);exit(0);
	}
	fp(i,1,len)t[i]=mn;fp(i,len+1,n)t[i]=s[now--];
	if(cmp(t,ans))fp(i,1,n)ans[i]=t[i];
}
int main(){
	scanf("%d%d%s",&n,&k,s+1);
	mn='z',mx='a';
	fp(i,1,n)cmin(mn,s[i]),cmax(mx,s[i]),ans[i]='z',s[(n<<1)-i+1]=s[i];
	if(mn==mx)return printf("%s\n",s+1),0;
	if(s[n]==mn)solve(s,k);
	fp(i,n,n<<1)if(s[i]==mn)solve(s+i-n,k-1);
	printf("%s\n",ans+1);
	return 0;
}