// Problem: E. Oolimry and Suffix Array
// Contest: Codeforces - Codeforces Round #723 (Div. 2)
// URL: https://codeforces.com/contest/1526/problem/E
// Memory Limit: 256 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>

using namespace std;

#define dbg(x...) \
    do { \
        cout << #x << " -> "; \
        err(x); \
    } while (0)

void err() {
    cout << endl;
}

template<class T, class... Ts>
void err(T arg, Ts &... args) {
    cout << arg << ' ';
    err(args...);
}

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef __int128 i128;
const int N = 4e5 + 10;
const ll mod = 998244353;
int a[N];
int pos[N];
ll fac[N];
ll inv[N];

ll qpow(ll a, ll b) {
    a %= mod;
    ll ret = 1;
    while (b) {
        if (b & 1) ret = ret * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return ret;
}

ll C(ll n, ll m) {
    if (n < m) return 0;
    return fac[n] * inv[n - m] % mod * inv[m] % mod;
}

void solve(int tCase) {
    int n, k;
    cin >> n >> k;
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        pos[a[i]] = i;
    }
    pos[n] = -1;
    int cnt = 0;
    for (int i = 0; i < n - 1; ++i) {
        if (pos[a[i] + 1] > pos[a[i + 1] + 1]) cnt++;
    }
    ll ans = C(n + k - cnt - 1, n);
    cout << ans;
}

int main() {
    fac[0] = fac[1] = 1;
    for (int i = 2; i < N; ++i) {
        fac[i] = fac[i - 1] * i % mod;
    }
    inv[N - 1] = qpow(fac[N - 1], mod - 2);
    for (int i = N - 1; i >= 1; --i) {
        inv[i - 1] = inv[i] * i % mod;
    }
    ios_base::sync_with_stdio(false);
    int T = 1;
//    cin >> T;
    for (int t = 1; t <= T; ++t) {
        solve(t);
    }
    return 0;
}