#pragma GCC optimize("O2,unroll-loops")
#include<bits/stdc++.h>
#define all(x) x.begin(), x.end()
using namespace std;
using vi = vector<int>;
string get(string s, int k) {
	int n = s.size();
	int suf = 1;
	while(suf < n && s[s.size()-1-suf] == s.back()) suf++;
	while(k && suf < n) {
		if(--k) {
			string t = s;
			reverse(all(t));
			t = s + t;
			s = t.substr(suf, n);
		} else {
			string t = s;
			reverse(all(t));
			t = s + t;
			s = t.substr(n-suf, n);
		}
		suf *= 2;
	}
	return s;
}
int main() {
	cin.tie(0)->sync_with_stdio(0);
	char mn = 'z'+1;
	int n, k;
	string s;
	cin >> n >> k >> s;
	for(auto i : s) mn = min(mn, i);
	if(k > 12) return cout << string(n, mn), 0;
	string u = s;
	reverse(all(u));
	u = s + u;
	string ans(1, 'z'+1);
	for(int i = 0; i+n-1 < 2*n; i++) ans = min(ans, get(u.substr(i, n), k-1));
	cout << ans;
}
