#include <bits/stdc++.h>
#define int long long

using namespace std;

const int mod = 998244353;

int fpow(int a, int pow) {
    if (pow == 0) return 1;
    if (pow % 2 == 1) return a * fpow(a, pow - 1) % mod;
    int hpow = fpow(a, pow / 2);
    return hpow * hpow % mod;
}

const int maxn = 1e6 + 123;

int pow2[maxn];

void precalc() {
    pow2[0] = 1;
    for (int i = 1; i < maxn; i++) {
        pow2[i] = pow2[i - 1] * 2 % mod;
    }
}

vector<int> adj[maxn];

int sz[maxn];

int idx[maxn];
int ans[maxn];

int dp[maxn];

void dfs(int v, int p) {
    sz[v] = 1;
    dp[v] = 1;
    for (int i : adj[v]) {
        if (i == p) continue;
        dfs(i, v);
        dp[v] *= dp[i];
        dp[v] %= mod;
        sz[v] += sz[i];
    }
}

signed main() {
    precalc();
    int n, k;
    cin >> n >> k;
    vector<int> x(k);
    for (int& i : x) {
        cin >> i;
        i--;
    }
    sort(x.begin(), x.end());
    int ans = 1;
    int prv = x[0];
    for (int i = 1; i < x.size(); i++) {
        ans *= fpow(i + 1, x[i] - prv - 1);
        ans %= mod;
        prv = x[i];
    }
    ans *= fpow(x.size() + 1, n - prv - 1);
    ans %= mod;
    cout << ans << "\n";
    return 0;
    fill(idx, idx + n, -1);
    for (int i = 0; i < k; i++) {
        idx[x[i]] = i;
    }
    for (int i = 1; i < n; i++) {
        int p;
        cin >> p;
        p--;
        adj[p].push_back(i);
    }
    dfs(0, -1);
    cout << ans << "\n";
}