#include <bits/stdc++.h>
int minn(int a, int b) { return (a <= b ? a : b); }
int maxx(int a, int b) { return (a >= b ? a : b); }
int abss(int a) { return (a >= 0 ? a : -a); }
int t1, t2;
int n, q;
char s[200005];
const int SEG1 = (1 << 18);
const int SEG2 = (1 << 19);
int segsum[SEG2];
int segl[SEG2];
int segr[SEG2];
int segf[SEG2];
int seglf[SEG2];
int segrf[SEG2];
int segans[SEG2];
void fix(int i) {
  segsum[i] = segsum[i * 2] + segsum[i * 2 + 1];
  segl[i] = minn(segl[i * 2], segsum[i * 2] + segl[i * 2 + 1]);
  segr[i] = maxx(segr[i * 2 + 1], segr[i * 2] + segsum[i * 2 + 1]);
  segf[i] =
      maxx(segf[i * 2] - segsum[i * 2 + 1], segsum[i * 2] + segf[i * 2 + 1]);
  seglf[i] = maxx(seglf[i * 2], segsum[i * 2] + seglf[i * 2 + 1]);
  seglf[i] = maxx(seglf[i], segf[i * 2] - segl[i * 2 + 1]);
  segrf[i] = maxx(segrf[i * 2 + 1], segrf[i * 2] - segsum[i * 2 + 1]);
  segrf[i] = maxx(segrf[i], segr[i * 2] + segf[i * 2 + 1]);
  segans[i] = maxx(segans[i * 2], segans[i * 2 + 1]);
  segans[i] = maxx(segans[i * 2], segans[i * 2 + 1]);
  segans[i] = maxx(segans[i], segr[i * 2] + seglf[i * 2 + 1]);
  segans[i] = maxx(segans[i], segrf[i * 2] - segl[i * 2 + 1]);
  if (0 && segans[i]) {
    printf("%d %d [%d %d] %d [%d %d] = %d\n", i, segsum[i], segl[i], segr[i],
           segf[i], seglf[i], segrf[i], segans[i]);
  }
}
void fixleaf(int i) {
  if (0) printf("fix leaf %d %c\n", i, s[i]);
  if (s[i] == '(') {
    segsum[i + SEG1] = -1;
    segl[i + SEG1] = -1;
    segr[i + SEG1] = 0;
    segf[i + SEG1] = 1;
    seglf[i + SEG1] = 1;
    segrf[i + SEG1] = 1;
    segans[i + SEG1] = 1;
  }
  if (s[i] == ')') {
    segsum[i + SEG1] = 1;
    segl[i + SEG1] = 0;
    segr[i + SEG1] = 1;
    segf[i + SEG1] = 1;
    seglf[i + SEG1] = 1;
    segrf[i + SEG1] = 1;
    segans[i + SEG1] = 1;
  }
}
int main() {
  scanf("%d%d", &n, &q);
  scanf(" %s", s + 1);
  for (int i = 1; i <= 2 * n - 2; i++) fixleaf(i);
  for (int i = SEG1 - 1; i; i--) fix(i);
  printf("%d\n", segans[1]);
  while (q--) {
    scanf("%d%d", &t1, &t2);
    s[t1] ^= ('(' ^ ')');
    s[t2] ^= ('(' ^ ')');
    fixleaf(t1);
    fixleaf(t2);
    t1 += SEG1;
    t2 += SEG1;
    while (t1 /= 2) fix(t1);
    while (t2 /= 2) fix(t2);
    printf("%d\n", segans[1]);
  }
}
