#include #include #include #include using namespace std; using namespace atcoder; using namespace __gnu_pbds; using ll=long long; using ld=long double; using vll=vector; using pll=pair; using mint=modint; template using ordered_map=tree,rb_tree_tag,tree_order_statistics_node_update>; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll N,M,p=1; cin>>N>>M; //permutationとして考えます //つまり、1の逆像さえ分かれば終わりです vll A(M,0); for(int i=0;i>A[i]; //逆操作をします for(int i=M-1;i>=0;--i){ //今一番前のやつをA[i]に戻す //逆像の現在値はpです if(p==1)p=A[i]; else if(p<=A[i])p--; //pの後ろに挿入する、つまり前にいるやつが一つ減る } cout<