#include <bits/stdc++.h>
using namespace std;
const int Maxn = 200010;
const int mod = 998244353;
const int inf = 2147483647;
const double pi = acos(-1.0);
int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return x * f;
}
int Pow(int x, int y) {
  if (!y) return 1;
  int t = Pow(x, y >> 1);
  t = (long long)t * t % mod;
  if (y & 1) t = (long long)t * x % mod;
  return t;
}
void inc(int& x, int y) {
  x += y;
  if (x >= mod) x -= mod;
}
void dec(int& x, int y) {
  x -= y;
  if (x < 0) x += mod;
}
int n, q, p[Maxn], ans;
struct Seg {
  int l, r, lc, rc;
  pair<int, int> t;
} tr[Maxn << 1];
int tot = 0;
pair<int, int> merge(pair<int, int> lc, pair<int, int> rc) {
  pair<int, int> t;
  t.first = ((long long)lc.first * rc.second % mod + rc.first) % mod;
  t.second = (long long)lc.second * rc.second % mod;
  return t;
}
void build(int l, int r) {
  int x = ++tot;
  tr[x].l = l;
  tr[x].r = r;
  if (l == r) {
    tr[x].t = make_pair(p[l], p[l]);
    return;
  }
  int mid = l + r >> 1;
  tr[x].lc = tot + 1, build(l, mid);
  tr[x].rc = tot + 1, build(mid + 1, r);
  tr[x].t = merge(tr[tr[x].lc].t, tr[tr[x].rc].t);
}
pair<int, int> query(int x, int l, int r) {
  if (tr[x].l == l && tr[x].r == r) return tr[x].t;
  int mid = tr[x].l + tr[x].r >> 1, lc = tr[x].lc, rc = tr[x].rc;
  if (r <= mid) return query(lc, l, r);
  if (l > mid) return query(rc, l, r);
  return merge(query(lc, l, mid), query(rc, mid + 1, r));
}
set<int> S;
int v[Maxn];
int main() {
  n = read(), q = read();
  int inv = Pow(100, mod - 2);
  for (int i = 1; i <= n; i++)
    p[i] = Pow((long long)read() * inv % mod, mod - 2);
  ans = p[1];
  for (int i = 2; i <= n; i++) ans = (long long)(1 + ans) * p[i] % mod;
  build(1, n);
  ans = tr[1].t.first;
  S.insert(1);
  S.insert(n + 1);
  while (q--) {
    int x = read(), l, r;
    set<int>::iterator u;
    u = S.lower_bound(x);
    u--;
    l = (*u);
    u = S.upper_bound(x);
    r = (*u);
    if (!v[x]) {
      dec(ans, query(1, l, r - 1).first);
      inc(ans, query(1, l, x - 1).first);
      inc(ans, query(1, x, r - 1).first);
      S.insert(x);
    } else {
      dec(ans, query(1, l, x - 1).first);
      dec(ans, query(1, x, r - 1).first);
      inc(ans, query(1, l, r - 1).first);
      S.erase(x);
    }
    v[x] ^= 1;
    printf("%d\n", ans);
  }
}
