#include<bits/stdc++.h>
using namespace std;
long long fac(int n) {
long long result = 1;
if(n >= 2) {
for(int i = 2; i <= n; i++) {
result *= i;
}
}
return result;
}
long long findpos(const vector<int>& perm) {
int n = perm.size();
vector<int> used(n, 0);
long long pos = 1;
for (int i = 0; i < n; i++) {
int k = 0;
for (int j = 0; j < n; j++) {
if (!used[j] && perm[i] > j + 1) {
k++;
}
}
pos += k * fac(n - i - 1);
used[perm[i] - 1] = 1;
}
return pos;
}
vector<int> conpos(int n, long long k) {
vector<int> result;
vector<int> available;
for (int i = 1; i <= n; i++) {
available.push_back(i);
}
k--;
for (int i = 0; i < n; i++) {
long long fact = fac(n - i - 1);
int index = k / fact;
result.push_back(available[index]);
available.erase(available.begin() + index);
k %= fact;
}
return result;
}
int main() {
int N, M;
cin >> N >> M;
vector<int> a(N);
for (int i = 0; i < N; i++) {
cin >> a[i];
}
long long pos = findpos(a);
long long total_permutations = fac(N);
long long num = pos + M;
if (num > total_permutations) {
num = (num - 1) % total_permutations + 1;
}
vector<int> permutation = conpos(N, num);
for (int i = 0; i < N; i++) {
cout << permutation[i] << " ";
}
cout << endl;
return 0;
}