#include <bits/stdc++.h>
using namespace std;
const int N = 500010;
const int mod = 998244353;
struct Node {
  long long a[2][2];
} tr[N << 2];
char s[N];
Node mul(Node& x, Node& y) {
  Node z;
  memset(z.a, 0, sizeof(z.a));
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
      for (int k = 0; k < 2; k++) {
        z.a[i][j] = (z.a[i][j] + x.a[i][k] * y.a[k][j]) % mod;
      }
    }
  }
  return z;
}
Node calc(int pos) {
  Node res;
  memset(res.a, 0, sizeof(res.a));
  res.a[0][0] = s[pos] - '0' + 1;
  res.a[0][1] = 1;
  if (pos >= 2 && s[pos - 1] == '1' && s[pos] < '9') {
    int val = 10 + s[pos] - '0';
    res.a[1][0] = 19 - val;
  }
  return res;
}
void build(int o, int l, int r) {
  if (l == r) {
    tr[o] = calc(l);
    return;
  }
  int mid = (l + r) >> 1;
  build(o << 1, l, mid);
  build(o << 1 | 1, mid + 1, r);
  tr[o] = mul(tr[o << 1], tr[o << 1 | 1]);
}
void update(int o, int l, int r, int x) {
  if (l == r) {
    tr[o] = calc(x);
    return;
  }
  int mid = (l + r) >> 1;
  if (x <= mid)
    update(o << 1, l, mid, x);
  else
    update(o << 1 | 1, mid + 1, r, x);
  tr[o] = mul(tr[o << 1], tr[o << 1 | 1]);
}
int main() {
  int n, m;
  scanf("%d%d%s", &n, &m, s + 1);
  build(1, 1, n);
  while (m--) {
    int x, d;
    scanf("%d%d", &x, &d);
    s[x] = d + '0';
    update(1, 1, n, x);
    if (x < n) update(1, 1, n, x + 1);
    printf("%lld\n", tr[1].a[0][0]);
  }
  return 0;
}
