#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#include <bits/stdc++.h>
using namespace std;
template<class t> inline t read(t &x){
	char c=getchar();bool f=0;x=0;
	while(!isdigit(c)) f|=c=='-',c=getchar();
	while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
	if(f) x=-x;return x;
}
template<class t,class ...A> inline void read(t &x,A &...a){
	read(x);read(a...);
}
template<class t> inline void write(t x){
	if(x<0) putchar('-'),write(-x);
	else{if(x>9) write(x/10);putchar('0'+x%10);}
}

const int N=5005;
char mc='z',s[N<<1];
int n,k,f[N<<1],ma,p;

bool compare(int l,int r){
	for(;s[l]==s[r];l++,r++) ;
	return s[l]<s[r];
}

signed main(){
	read(n,k);k=min(k,15);
	scanf("%s",s+1);
	for(int i=1;i<=n;i++) s[n*2-i+1]=s[i];
	for(int i=1;i<=n;i++) s[i]<mc?mc=s[i]:1;
	for(int i=n*2;i;i--) f[i]=s[i]==mc?f[i+1]+1:0,ma=f[i]>ma?f[i]:ma;
	int rest=max(n-(ma<<k-1),0);
	for(int i=1;i<=n;i++) if(f[i]==ma&&(!p||compare(i+ma,p))) p=i+ma;
//	write(ma);return 0;
	for(int i=1;i<=n-rest;i++) putchar(mc);
	for(int i=0;i<rest;i++) putchar(s[p+i]);
}