#include <bits/stdc++.h>
using namespace std;
int n, q, sqd[500010], decl[1010], decr[1010], decm[1010], declrev[1010],
    decrrev[1010], decmrev[1010], decd[1010], l, r, com[1010], ter[1010];
char c;
void make_cam(int cam) {
  int ld = 500 * cam, lrev = 500 * cam;
  com[cam] = sqd[500 * cam];
  ter[cam] = sqd[min(n - 1, 500 * (cam + 1) - 1)];
  decm[cam] = 0;
  decmrev[cam] = 0;
  decl[cam] = n;
  declrev[cam] = n;
  for (int j = 500 * cam + 1; j < n && j < 500 * (cam + 1); j++) {
    if (sqd[j] == 1 && sqd[j - 1] == -1) {
      decl[cam] = min(decl[cam], j);
      decr[cam] = j;
      decm[cam] = max(decm[cam], j - ld);
      ld = j;
    }
    if (sqd[j] == -1 && sqd[j - 1] == 1) {
      declrev[cam] = min(declrev[cam], j);
      decrrev[cam] = j;
      decmrev[cam] = max(decmrev[cam], j - lrev);
      lrev = j;
    }
  }
  decm[cam] = max(decm[cam], min(n, 500 * (cam + 1)) - ld);
  decmrev[cam] = max(decmrev[cam], min(n, 500 * (cam + 1)) - lrev);
}
void rev(int in, int fi) {
  if (in / 500 == (fi - 1) / 500) {
    if (in % 500 == 0 && fi % 500 == 0)
      decd[in / 500] *= -1;
    else {
      for (int i = in; i < fi; i++) sqd[i] *= -1;
      make_cam(in / 500);
    }
  } else {
    rev(in, 500 * (in / 500) + 500);
    rev(500 * (in / 500) + 500, fi);
  }
}
int best(int in, int fi) {
  int resp = 0, ld = in, rd;
  for (rd = ld + 1; rd % 500 && rd < fi; rd++) {
    if (sqd[rd] * decd[rd / 500] == 1 &&
        sqd[rd - 1] * decd[(rd - 1) / 500] == -1) {
      resp = max(resp, rd - ld);
      ld = rd;
    }
  }
  for (int i = in / 500 + 1; i < (fi - 1) / 500; i++) {
    if (com[i] * decd[i] == 1 && ter[i - 1] * decd[i - 1] == -1) {
      resp = max(resp, 500 * i - ld);
      ld = 500 * i;
    }
    if (decd[i] == 1) {
      resp = max(resp, decm[i]);
      if (decl[i] < n) {
        resp = max(resp, decl[i] - ld);
        ld = decr[i];
      }
    } else {
      resp = max(resp, decmrev[i]);
      if (declrev[i] < n) {
        resp = max(resp, declrev[i] - ld);
        ld = decrrev[i];
      }
    }
    rd += 500;
  }
  while (rd < fi) {
    if (sqd[rd] * decd[rd / 500] == 1 &&
        sqd[rd - 1] * decd[(rd - 1) / 500] == -1) {
      resp = max(resp, rd - ld);
      ld = rd;
    }
    rd++;
  }
  resp = max(resp, fi - ld);
  return resp;
}
int main() {
  scanf("%d %d", &n, &q);
  for (int i = 0; i < n; i++) {
    scanf(" %c", &c);
    if (c == '>')
      sqd[i] = 1;
    else
      sqd[i] = -1;
  }
  for (int i = 0; 500 * i < n; i++) {
    make_cam(i);
    decd[i] = 1;
  }
  for (int i = 0; i < q; i++) {
    scanf("%d %d", &l, &r);
    l--;
    rev(l, r);
    printf("%d\n", best(l, r));
  }
  return 0;
}
