#include<bits/stdc++.h>

using namespace std;
#define int long long

const int mod = 998244353;

int umn(int a , int b) {
    return ((a * b) % mod + mod) % mod;
}
int add(int a , int b) {
    return ((a + b) % mod + mod) % mod;
}
int mn(int a , int b) {
    return ((a - b) % mod + mod) % mod;
}

int bp(int a , int p) {
    if(p == 0)return 1;
    if(p % 2 == 0) {
        int x = bp(a , p / 2);
        return umn(x , x);
    } else {
        return umn(bp(a , p - 1) , a);
    }
}

int rec(vector<int> a) {
    int sum = 0, n = a.size();
    for(int i = 0 ; i < n ; i++) {
        sum = add(sum , bp(a[i] , i + 1));
    }
    return sum;
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n , q;
    cin >> n >> q;
    vector<int> a(n);
    for(int i = 0 ; i < n ; i++) {
        cin >> a[i];
    }
    vector<int> c(n);
    map<pair<int , pair<int ,int>> , int> mp;
    map<pair<int , int> , vector<int>> z;
    int lans = rec(a) , lt = -1;
    z[{lans , -1}] = a;
    lt = -1;
    for(int i = 0 ; i < q ; i++) {
        int t;
        cin >> t;
        if(mp.count({lans , {t , lt}})) {
            cout << mp[{lans , {t , lt}}] << ' ';
            lans = mp[{lans , {t , lt}}];
        } else {
            a = z[{lans , lt}];
            if(t == 1) {
                for(int i = 0 ; i < n ; i++) {
                    c[i]= a[n - i - 1];
                }
                a = c;
            }
            if(t == 2) {
                for(int i = 0 ; i < n ; i++) {
                    c[i] = n - a[i] + 1;
                }
                a = c;
            }
            if(t == 3) {
                for(int i = 0 ; i < n ; i++) {
                    c[a[i] - 1] = i + 1;
                }
                a = c;
            }
            int res = rec(a);
            mp[{lans , {t , lt}}] = res;
            lans = res;
            z[{lans , t}] = a;
            cout << res << ' ';
        }
        lt = t;
    }
}
