#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
struct node {
  int x;
};
bool cmp(node a, node b) { return a.x < b.x; }
long long int poww(long long int a, long long int b) {
  long long int x = 1, y = a;
  while (b > 0) {
    if (b % 2 == 1) {
      x = (x * y);
      if (x > 1000000007) x %= 1000000007;
    }
    y = (y * y);
    if (y > 1000000007) y %= 1000000007;
    b /= 2;
  }
  return x;
}
int main() {
  int n, m, i, j, count = 0, grp = 0, pos;
  char ch;
  scanf("%d", &n);
  scanf("%d", &m);
  char a[n + 2];
  scanf("%s", a);
  for (i = 0; i < n - 1; i++) {
    if (a[i] == '.' && a[i + 1] != '.') grp++;
    if (a[i] == '.') count++;
  }
  if (a[i] == '.') {
    grp++;
    count++;
  }
  for (i = 0; i < m; i++) {
    scanf("%d", &pos);
    scanf(" %c", &ch);
    pos--;
    if (ch == '.' && a[pos] != '.') {
      count++;
      a[pos] = '.';
      if (pos == 0) {
        if (a[pos + 1] != '.') grp++;
      } else if (pos == n - 1) {
        if (a[pos - 1] != '.') grp++;
      } else if (a[pos - 1] == '.' && a[pos + 1] == '.') {
        grp--;
      } else if (a[pos - 1] != '.' && a[pos + 1] != '.') {
        grp++;
      }
    } else if (ch != '.' && a[pos] == '.') {
      count--;
      a[pos] = 'b';
      if (pos == 0) {
        if (a[pos + 1] != '.') grp--;
      } else if (pos == n - 1) {
        if (a[pos - 1] != '.') grp--;
      } else if (a[pos - 1] != '.' && a[pos + 1] != '.') {
        grp--;
      } else if (a[pos - 1] == '.' && a[pos + 1] == '.') {
        grp++;
      }
    }
    cout << count - grp << endl;
  }
  return 0;
}
