#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const int MOD = 998244353;
struct fract {
  int x, iv, nrz;
};
int n, m, q;
int p[200005];
fract Arb[800005];
inline int lgput(int x, int p) {
  int ans = 1, aux = x;
  for (int i = 1; i <= p; i = i << 1) {
    if (i & p) ans = (1LL * aux * ans) % MOD;
    aux = (1LL * aux * aux) % MOD;
  }
  return ans;
}
int Arb2[800005];
void U(int x, int v, int st = 1, int dr = m, int nod = 1) {
  if (st == dr) {
    Arb2[nod] += v;
    return;
  }
  int mij = (st + dr) / 2;
  if (x <= mij)
    U(x, v, st, mij, nod * 2);
  else
    U(x, v, mij + 1, dr, nod * 2 + 1);
  Arb2[nod] = Arb2[nod * 2] + Arb2[nod * 2 + 1];
}
int Q(int x, int y, int st = 1, int dr = m, int nod = 1) {
  if (x <= st && dr <= y) return Arb2[nod];
  int mij = (st + dr) / 2;
  int a = 0;
  if (x <= mij) a += Q(x, y, st, mij, nod * 2);
  if (mij + 1 <= y) a += Q(x, y, mij + 1, dr, nod * 2 + 1);
  return a;
}
int cb(int val, int st = 1, int dr = m, int nod = 1) {
  if (st == dr) return st;
  int mij = (st + dr) / 2;
  if (Arb2[nod * 2] >= val) return cb(val, st, mij, nod * 2);
  return cb(val - Arb2[nod * 2], mij + 1, dr, nod * 2 + 1);
}
void build(int st = 1, int dr = n, int nod = 1) {
  if (st == dr) {
    Arb[nod].x = (1LL * p[st] * lgput(100, MOD - 2)) % MOD;
    Arb[nod].nrz = Arb[nod].iv = lgput(Arb[nod].x, MOD - 2);
    return;
  }
  int mij = (st + dr) / 2;
  build(st, mij, nod * 2);
  build(mij + 1, dr, nod * 2 + 1);
  Arb[nod].x = (1LL * Arb[nod * 2].x * Arb[nod * 2 + 1].x) % MOD;
  Arb[nod].iv = (1LL * Arb[nod * 2].iv * Arb[nod * 2 + 1].iv) % MOD;
  Arb[nod].nrz = ((1LL * Arb[nod * 2 + 1].iv * Arb[nod * 2].nrz) % MOD +
                  Arb[nod * 2 + 1].nrz) %
                 MOD;
}
fract query(int x, int y, int st = 1, int dr = n, int nod = 1) {
  if (x <= st && dr <= y) return Arb[nod];
  int mij = (st + dr) / 2;
  fract a1 = {0, 0, 0}, a2 = {0, 0, 0};
  if (x <= mij) a1 = query(x, y, st, mij, nod * 2);
  if (mij + 1 <= y) a2 = query(x, y, mij + 1, dr, nod * 2 + 1);
  if (!(mij + 1 <= y) || !(x <= mij))
    return {a1.x + a2.x, a1.iv + a2.iv, a1.nrz + a2.nrz};
  a1.nrz = (1LL * a1.nrz * a2.iv) % MOD + a2.nrz;
  if (a1.nrz >= MOD) a1.nrz -= MOD;
  a1.x = (1LL * a1.x * a2.x) % MOD;
  a1.iv = (1LL * a1.iv * a2.iv) % MOD;
  return a1;
}
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 1; i <= n; ++i) scanf("%d", &p[i]);
  build();
  m = n + 1;
  U(1, 1);
  U(n + 1, 1);
  int Sol = query(1, n).nrz;
  int x;
  while (q--) {
    scanf("%d", &x);
    int p1 = cb(Q(1, x - 1));
    int p2 = cb(Q(1, x) + 1);
    if (Q(1, x) - Q(1, x - 1) == 0) {
      U(x, 1);
      Sol = Sol - query(p1, p2 - 1).nrz;
      if (Sol < 0) Sol += MOD;
      Sol = Sol + query(p1, x - 1).nrz;
      if (Sol >= MOD) Sol -= MOD;
      Sol = Sol + query(x, p2 - 1).nrz;
      if (Sol >= MOD) Sol -= MOD;
    } else {
      U(x, -1);
      Sol = Sol + query(p1, p2 - 1).nrz;
      if (Sol >= MOD) Sol -= MOD;
      Sol = Sol - query(p1, x - 1).nrz;
      if (Sol < 0) Sol += MOD;
      Sol = Sol - query(x, p2 - 1).nrz;
      if (Sol < 0) Sol += MOD;
    }
    printf("%d\n", Sol);
  }
  return 0;
}
