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


using namespace std;

typedef long long ll;
typedef pair<int, int> pii;

struct seg_tree {
	int n = 0;
	int t_s = 0;
	vector<int> val;
	vector<int> t;

	void tmp(int e) {
		if (e < t_s / 2 - 1) {
			tmp(e * 2 + 1);
			tmp(e * 2 + 2);
			t[e] = t[e * 2 + 1] + t[e * 2 + 2];
		}
	}
	void init() {
		val.resize(n);

		for (int& i : val) cin >> i;
		t.resize(int(pow(2, ceil(log2(n)) + 1)));
		t_s = t.size();

		for (int i = 0; i < n; i++) {
			t[i + t_s / 2 - 1] = val[i];
		}

		tmp(0);
	}

	ll f_lr(int l, int r, int lb, int rb, int e = 0) {
		if (l >= rb or r <= lb) {
			return 0;
		}
		else if (l <= lb and r >= rb) {
			return t[e];
		}
		else {
			return f_lr(l, r, lb, (rb + lb) / 2, e * 2 + 1) +
				f_lr(l, r, (rb + lb) / 2, rb, e * 2 + 2);
		}
	}

	void upp(int id, int lb, int rb, int val, int e = 0) {
		if (lb == rb - 1) {
			t[e] += val;
			return;
		}
		else if (id < (lb + rb) / 2) {
			t[e] += val;
			upp(id, lb, (lb + rb) / 2, val, e * 2 + 1);
		}
		else {
			t[e] += val;
			upp(id, (lb + rb) / 2, rb, val, e * 2 + 2);
		}
	}

	int f_n0(int val) {
		int ans = 0;

		int e = 0;
		while (e < t_s / 2 - 1) {
			if (ans + t[e * 2 + 1] < val) {
				ans += t[e * 2 + 1];
				e = e * 2 + 2;
			}
			else {
				e = e * 2 + 1;
			}
		}

		return  e - (t_s / 2 - 1);// первый элемент сумма префикса до которого равна или больше искомой
	}
};


int f_p(vector<int>& a, int e) {
	if (a[e] != -1) {
		e = a[e];
	}
	return 0;
}

int sp(int a, int b) {
	if (b == 0) return 1;
	else if (b % 2 == 1) {
		return int((1LL * sp(a, b - 1) * a) % 998244353);
	}
	else {
		int t = sp(a, b / 2);
		return int((1LL * t * t) % 998244353);
	}
}



int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int n, q; cin >> n >> q;

	vector<int> a(n);
	for (int& i : a) cin >> i;

	vector<int> b(8);

	int ans = 0;
	for (int j = 0; j < n; j++) {
		ans = (ans + sp(a[j], j + 1)) % 998244353;
	}
	b[0] = ans;


	vector<int> tmp = a;
	reverse(tmp.begin(), tmp.end());

	ans = 0;
	for (int j = 0; j < n; j++) {
		ans = (ans + sp(tmp[j], j + 1)) % 998244353;
	}
	b[1] = ans;

	tmp = a;
	for (int i = 0; i < a.size(); i++) {
		tmp[i] = tmp.size() - a[i] + 1;
	}

	ans = 0;
	for (int j = 0; j < n; j++) {
		ans = (ans + sp(tmp[j], j + 1)) % 998244353;
	}
	b[2] = ans;

	tmp = a;
	reverse(tmp.begin(), tmp.end());
	for (int i = 0; i < a.size(); i++) {
		tmp[i] = tmp.size() - tmp[i] + 1;
	}

	ans = 0;
	for (int j = 0; j < n; j++) {
		ans = (ans + sp(tmp[j], j + 1)) % 998244353;
	}
	b[3] = ans;


	int ti = 0;
	while (q--) {
		int x; cin >> x;
		if (ti & (1 << (x - 1))) {
			ti -= (1 << (x - 1));
		}
		else {
			ti += (1 << (x - 1));
		}
		cout << b[ti] << ' ';
	}


	return 0;
}

