#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e3 + 10;
char s[maxn], res[maxn];
char c;
int n, k, len[maxn], mx;
bool check(int p) {
  for (int i = 1; i <= n; i++)
    if (s[i + p - 1] > res[i])
      return false;
    else if (s[i + p - 1] < res[i])
      return true;
  return false;
}
int main() {
  c = 'z' + 1;
  scanf("%d%d", &n, &k);
  scanf("%s", s + 1);
  for (int i = 1; i <= n; i++) c = min(c, s[i]), s[n * 2 - i + 1] = s[i];
  for (int i = 1; i <= n; i++) res[i] = 'z' + 1;
  if (k >= 15) {
    for (int i = 1; i <= n; i++) printf("%c", c);
    printf("\n");
    return 0;
  }
  if (k == 1) {
    for (int i = 1; i <= n + 1; i++)
      if (check(i)) {
        for (int j = 1; j <= n; j++) res[j] = s[i + j - 1];
      }
    printf("%s", res + 1);
    return 0;
  }
  for (int i = 1; i <= 2 * n; i++)
    len[i] = s[i] == c ? len[i - 1] + 1 : 0, mx = max(mx, len[i]);
  k--;
  if ((mx << k) >= n) {
    for (int i = 1; i <= n; i++) printf("%c", c);
    printf("\n");
    return 0;
  }
  int now = mx << k;
  for (int i = 1; i <= n + mx; i++)
    if (len[i] == mx && check(i + 1))
      for (int j = 1; j <= n; j++) res[j] = s[i + j];
  for (int i = 1; i <= now; i++) printf("%c", c);
  for (int i = now + 1; i <= n; i++) printf("%c", res[i - now]);
  printf("\n");
}
