// TaskB.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cmath>
#include <set>
#include <map>

using namespace std;

using ll = long long;
using ld = long double;

const ll inf = 1e9 + 7;
const ll mod = 998244353;

ll binpow(ll a, ll p) {
	if (p == 0) {
		return 1;
	}
	if (p % 2 == 0) {
		ll tmp = binpow(a, p / 2);
		return tmp * tmp % mod;
	}
	else {
		return binpow(a, p - 1) * a % mod;
	}
}

void f3(vector<ll> & a) {
	ll n = a.size();
	vector<ll> ar(n);
	for (ll i = 0; i < n; i++) {
		ar[a[i] - 1] = i + 1;
	}
	swap(a, ar);
}

void f2(vector<ll>& a) {
	ll n = a.size();
	vector<ll> ar(n);
	for (ll i = 0; i < n; i++) {
		a[i] = n - a[i] + 1;
	}
}

void prll(vector<ll> &a) {
	for (ll i = 0; i < a.size(); i++) {
		cout << a[i] << ' ';
	}
	cout << '\n';
}

map<vector<ll>, ll> mp;

void getmp(vector<ll> st, vector<ll> a) {
	for (ll i = 0; i < st.size(); i++) {
		if (st[i] == 1) {
			reverse(a.begin(), a.end());
		}
		else if (st[i] == 2) {
			f2(a);
		}
		else {
			f3(a);
		}
	}
	ll val = 0;
	for (ll i = 0; i < a.size(); i++) {
		val += binpow(a[i], i + 1);
		val %= mod;
	}
	mp[st] = val;
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	ll n, q;
	cin >> n >> q;
	vector<ll> a(n);
	for (ll i = 0; i < n; i++) {
		cin >> a[i];
	}
	vector<ll> qs(q);
	ll ans = 0;
	for (ll i = 0; i < q; i++) {
		cin >> qs[i];
	}
	/*ll val1 = 0;
	ll val2 = 0;
	for (ll i = 0; i < n; i++) {
		val1 += binpow(a[i], i + 1);
		val2 += binpow(a[i], n - i);
		val1 %= mod;
		val2 %= mod;
	}
	for (ll i = 0; i < q; i++) {
		if (qs[i] != 3) {
			ans++;
		}
		if (ans % 2 == 0) {
			cout << val1 << '\n';
		}
		else {
			cout << val2 << '\n';
		}
	}*/
	//vector<ll> ar(4);
	//for (ll j = 0; j < 4; j++) {
	//	vector<ll> arr = a;
	//	if ((j >> 1) & 1) {
	//		for (ll i = 0; i < n; i++) {
	//			arr[i] = n - arr[i] + 1;
	//		}
	//	}
	//	if (j & 1) {
	//		reverse(arr.begin(), arr.end());
	//	}
	//	for (ll i = 0; i < n; i++) {
	//		ar[j] += binpow(arr[i], i + 1);
	//		ar[j] %= mod;
	//	}
	//}
	//ll cnt1 = 0;
	//ll cnt2 = 0;
	//for (ll i = 0; i < q; i++) {
	//	if (qs[i] == 1) {
	//		cnt1 ^= 1;
	//	}
	//	if (qs[i] == 2) {
	//		cnt2 ^= 2;
	//	}
	//	cout << ar[cnt2 + cnt1] << '\n';
	//
	//ll n;
	//cin >> n;
	//vector<ll> a(n);
	//for (ll i = 0; i < n; i++) {
	//	a[i] = i + 1;
	//}
	//random_shuffle(a.begin(), a.end());
	//vector<ll> sa = a;
	//prll(a);
	//for (ll i = 0; i < 100000; i++) {
	//	f2(a);
	//	f3(a);
	//	prll(a);
	//	if (a == sa) {
	//		cout << i << '\n';
	//		break;
	//	}
	//}
	vector<ll> ans2(5);
	vector<ll> ar = a;
	for (ll j = 0; j < n; j++) {
		ans2[0] += binpow(ar[j], j + 1);
		ans2[0] %= mod;
	}
	for (ll i = 1; i <= 4; i++) {
		f2(ar);
		f3(ar);
		for (ll j = 0; j < n; j++) {
			ans2[i] += binpow(ar[j], j + 1);
			ans2[i] %= mod;
		}
	}
	vector<ll> ans1(5);
	ar = a;
	for (ll j = 0; j < n; j++) {
		ans1[0] += binpow(ar[j], j + 1);
		ans1[0] %= mod;
	}
	for (ll i = 1; i <= 4; i++) {
		reverse(ar.begin(), ar.end());
		f3(ar);
		for (ll j = 0; j < n; j++) {
			ans1[i] += binpow(ar[j], j + 1);
			ans1[i] %= mod;
		}
	}
	vector<ll> st;
	for (ll i = 0; i < q; i++) {
		if (st.size() && st.back() == qs[i]) {
			st.pop_back();
		}
		else {
			st.push_back(qs[i]);
		}
		vector<ll> used(4);
		if (st.size() >= 4) {
			for (ll i = st.size() - 1; i >= st.size() - 4; i--) {
				used[st[i]]++;
			}
			if (used[1] == 2 && used[2] == 2 && used[3] == 0) {
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
			}
		}
		used.assign(4, 0);
		if (st.size() >= 6) {
			for (ll i = st.size() - 1; i >= st.size() - 6; i--) {
				used[st[i]]++;
			}
			if (used[1] == 2 && used[2] == 2 && used[3] == 2) {
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
			}
		}
		used.assign(4, 0);
		if (st.size() >= 8) {
			for (ll i = st.size() - 1; i >= st.size() - 8; i--) {
				used[st[i]]++;
			}
			if (used[1] == 4 && used[2] == 0 && used[3] == 4) {
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
			}
		}
		used.assign(4, 0);
		if (st.size() >= 8) {
			for (ll i = st.size() - 1; i >= st.size() - 8; i--) {
				used[st[i]]++;
			}
			if (used[1] == 4 && used[2] == 4 && used[3] == 0) {
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
				st.pop_back();
			}
		}
		if (mp.count(st) == 0) {
			getmp(st, a);
			cout << mp[st] << '\n';
		}
		else {
			cout << mp[st] << '\n';
		}
	}
}
