#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
char s[maxn];
struct Node {
  int sum, pmx, lmx, minn, maxx, d;
  Node() {}
  Node(int a, int b, int c, int d, int e, int f) {
    sum = a;
    pmx = b;
    lmx = c;
    minn = d;
    maxx = e;
    d = f;
  }
};
Node segT[maxn << 2];
void maintain(int curPos) {
  segT[curPos].sum = segT[curPos << 1].sum + segT[curPos << 1 | 1].sum;
  segT[curPos].pmx =
      max(segT[curPos << 1].pmx,
          max(segT[curPos << 1 | 1].maxx - 2 * segT[curPos << 1].minn +
                  segT[curPos << 1].sum,
              segT[curPos << 1 | 1].pmx - segT[curPos << 1].sum));
  segT[curPos].lmx =
      max(segT[curPos << 1].lmx,
          max(segT[curPos << 1 | 1].lmx - segT[curPos << 1].sum,
              segT[curPos << 1].maxx - 2 * segT[curPos << 1 | 1].minn -
                  2 * segT[curPos << 1].sum));
  segT[curPos].minn = min(segT[curPos << 1].minn,
                          segT[curPos << 1 | 1].minn + segT[curPos << 1].sum);
  segT[curPos].maxx = max(segT[curPos << 1].maxx,
                          segT[curPos << 1 | 1].maxx + segT[curPos << 1].sum);
  segT[curPos].d = max(max(segT[curPos << 1].d, segT[curPos << 1 | 1].d),
                       max(segT[curPos << 1].maxx + segT[curPos << 1 | 1].pmx -
                               segT[curPos << 1].sum,
                           segT[curPos << 1].lmx + segT[curPos << 1].sum +
                               segT[curPos << 1 | 1].maxx));
}
void build(int curPos, int curL, int curR) {
  if (curL == curR) {
    int x = s[curL] == '(' ? 1 : -1;
    segT[curPos] = Node(x, -x, -x, x, x, 0);
    return;
  }
  int mid = curL + curR >> 1;
  build(curPos << 1, curL, mid);
  build(curPos << 1 | 1, mid + 1, curR);
  maintain(curPos);
}
void update(int pos, int curPos, int curL, int curR) {
  if (curL == curR) return build(curPos, curL, curR);
  int mid = curL + curR >> 1;
  if (pos <= mid)
    update(pos, curPos << 1, curL, mid);
  else
    update(pos, curPos << 1 | 1, mid + 1, curR);
  maintain(curPos);
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  scanf("%s", s + 1);
  n = n * 2 - 2;
  build(1, 1, n);
  printf("%d\n", segT[1].d);
  while (m--) {
    int x, y;
    scanf("%d%d", &x, &y);
    swap(s[x], s[y]);
    update(x, 1, 1, n);
    update(y, 1, 1, n);
    printf("%d\n", segT[1].d);
  }
  return 0;
}
