#include <bits/stdc++.h>
using namespace std;
struct nr {
  int a1, a2, a3, a4;
} aint[2000005];
int v[500005];
int cat[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
    cat2[105] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1};
void update(int nod, int st, int dr, int poz, int val) {
  if (st == dr) {
    v[poz] = val;
    aint[nod].a1 = cat[v[poz]];
    aint[nod].a2 = 1;
    aint[nod].a3 = 1;
    aint[nod].a4 = 1;
    return;
  }
  int mij = (st + dr) / 2;
  if (poz <= mij)
    update(2 * nod, st, mij, poz, val);
  else
    update(2 * nod + 1, mij + 1, dr, poz, val);
  aint[nod].a1 = (1LL * aint[2 * nod].a1 * aint[2 * nod + 1].a1 % 998244353 +
                  1LL * aint[2 * nod].a3 * aint[2 * nod + 1].a2 *
                      cat2[v[mij] * 10 + v[mij + 1]] % 998244353) %
                 998244353;
  aint[nod].a2 = 1LL * aint[2 * nod].a2 * aint[2 * nod + 1].a1 % 998244353;
  if (mij - st >= 1)
    aint[nod].a2 =
        (1LL * aint[nod].a2 + 1LL * aint[2 * nod].a4 * aint[2 * nod + 1].a2 *
                                  cat2[v[mij] * 10 + v[mij + 1]] % 998244353) %
        998244353;
  aint[nod].a3 = 1LL * aint[2 * nod].a1 * aint[2 * nod + 1].a3 % 998244353;
  if (dr - (mij + 1) >= 1)
    aint[nod].a3 =
        (1LL * aint[nod].a3 + 1LL * aint[2 * nod].a3 * aint[2 * nod + 1].a4 *
                                  cat2[v[mij] * 10 + v[mij + 1]] % 998244353) %
        998244353;
  aint[nod].a4 = 1LL * aint[2 * nod].a2 * aint[2 * nod + 1].a3 % 998244353;
  if (mij - st >= 1 && dr - (mij + 1) >= 1)
    aint[nod].a4 =
        (1LL * aint[nod].a4 + 1LL * aint[2 * nod].a4 * aint[2 * nod + 1].a4 *
                                  cat2[v[mij] * 10 + v[mij + 1]] % 998244353) %
        998244353;
}
int main() {
  int n, m, i, x, d;
  char ch;
  scanf("%d%d\n", &n, &m);
  for (i = 1; i <= n; i++) ch = getchar(), v[i] = ch - 48;
  for (i = 1; i <= n; i++) update(1, 1, n, i, v[i]);
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &x, &d);
    update(1, 1, n, x, d);
    printf("%d\n", aint[1].a1);
  }
  return 0;
}
