// #include <cstdio>

// using namespace std;

// int main(){
//     int a[100];
    
//     int n, k;
//     scanf("%d%d", &n, &k);
    
//     for(int i = 0; i < n; i++) scanf("%d", &a[i]);
    
//     while(k--){
//         int t = a[n - 1];
//         for(int i = n - 2; i >= 0; i--)
//             a[i + 1] = a[i];
//         a[0] = t;
//     }
//     for (int i = 0; i < n; i++) printf("%d ", a[i]);

//     return 0 ;
// }
//时间复杂度是平方级别的 下面这个时间复杂度是线性级别的因为只有一重循环
#include <cstdio>
#include <algorithm>

using namespace std;

int main(){
    int a[100];
    
    int n, k;
    scanf("%d%d", &n, &k);
    
    for(int i = 0; i < n; i++) scanf("%d", &a[i]);
    
    reverse(a, a + n);//a 是数组的首地址 可以理解为数组第一个元素的地址
    reverse(a, a + k);
    reverse(a + k, a + n);
    
    for(int i = 0; i < n; i++) printf("%d ", a[i]);
    
    return 0;
}