// #define _GLIBCXX_DEBUG
#include <bits/stdc++.h>

using namespace std;

#define all(x) x.begin(), x.end()
#define int long long
using ld = long double;
using ll = long long;
using pii = pair<int, int>;

constexpr int mod = 998244353;

int gm(int val) { return val % mod; }

int n, q;

void do_1(vector<int>& p) { reverse(all(p)); }
void do_2(vector<int>& p) {
  for (int i = 0; i < n; ++i) {
    p[i] = n - 1 - p[i];
  }
}
void do_3(vector<int>& p) {
  vector<int> res(n);
  for (int i = 0; i < n; ++i) {
    // assert(0 <= p[i] - 1 && p[i] - 1 < n);
    res[p[i]] = i;
  }
  p = res;
}

void show(vector<int>& p) {
  for (const auto& el : p) {
    cout << el << ' ';
  }
  cout << '\n';
}

int bpow(int a, int p) {
  if (p == 0) {
    return 1;
  } else if (p % 2 == 0) {
    int res = bpow(a, p / 2);
    return gm(res * res);
  } else {
    return gm(bpow(a, p - 1) * a);
  }
}

int compute(vector<int>& p) {
  int res = 0;
  for (int i = 0; i < n; ++i) {
    res = gm(res + bpow(p[i] + 1, i + 1));
  }
  return res;
}

void solve() {
  cin >> n >> q;
  vector<int> arr(n);
  for (int i = 0; i < n; ++i) {
    cin >> arr[i];
    --arr[i];
  }
  vector<int> ans((1 << 3), 0);
  for (int mask = 0; mask < (1 << 3); ++mask) {
    auto copy = arr;
    if ((mask >> 0) & 1) {
      do_1(copy);
    }
    if ((mask >> 1) & 1) {
      do_2(copy);
    }
    if ((mask >> 2) & 1) {
      do_3(copy);
    }
    ans[mask] = compute(copy);
  }
  int mask = 0;
  auto toggle = [&](int i) { mask = mask ^ (1 << i); };
  for (int i = 0; i < q; ++i) {
    int b;
    cin >> b;
    if (b == 1) {
      if ((mask >> 2) & 1) {
        toggle(1);
      } else {
        toggle(0);
      }
    } else if (b == 2) {
      if ((mask >> 2) & 1) {
        toggle(0);
      } else {
        toggle(1);
      }
    } else {
      toggle(2);
      // int v0 = (mask >> 1) & 1;
      // int v1 = (mask >> 0) & 1;
      // int v2 = !((mask >> 2) & 1);
      // mask = 0;
      // if (v0) mask += (1 << 0);
      // if (v1) mask += (1 << 1);
      // if (v2) mask += (1 << 2);
    }
    cout << ans[mask] << ' ';
  }
  cout << '\n';
}

signed main() {
  cin.tie(nullptr);
  ios::sync_with_stdio(false);

#ifdef ROMALOCAL
  freopen("in.txt", "r", stdin);
#endif

  int t = 1;
  // cin >> t;
  while (t--) {
    solve();
  }
  return 0;
}