#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 20;
struct node {
  int sz;
  int res1, l1, r1;
  int res2, l2, r2;
  char cl, cr;
  bool lazy;
  node() {
    sz = 0;
    res1 = l1 = r1 = 0;
    res2 = l2 = r2 = 0;
    cl = cr = 0;
    lazy = 0;
  }
} seg[N << 2];
int n, q;
string str;
inline node merge(node a, node b) {
  if (!a.sz) return b;
  if (!b.sz) return a;
  node res;
  res.sz = a.sz + b.sz;
  res.res1 = max(a.res1, b.res1);
  res.l1 = a.l1;
  res.r1 = b.r1;
  if (!(a.cr == '<' && b.cl == '>')) {
    res.res1 = max(res.res1, a.r1 + b.l1);
    if (res.r1 == b.sz) res.r1 += a.r1;
    if (res.l1 == a.sz) res.l1 += b.l1;
  }
  res.res2 = max(a.res2, b.res2);
  res.l2 = a.l2;
  res.r2 = b.r2;
  if (!(a.cr == '>' && b.cl == '<')) {
    res.res2 = max(res.res2, a.r2 + b.l2);
    if (res.r2 == b.sz) res.r2 += a.r2;
    if (res.l2 == a.sz) res.l2 += b.l2;
  }
  res.cl = a.cl, res.cr = b.cr;
  return res;
}
void build(int v = 1, int s = 0, int e = n) {
  if (e - s == 1) {
    seg[v].sz = 1;
    seg[v].res1 = seg[v].l1 = seg[v].r1 = 1;
    seg[v].res2 = seg[v].l2 = seg[v].r2 = 1;
    seg[v].cl = seg[v].cr = str[s];
    return;
  }
  build((v << 1), s, ((s + e) >> 1));
  build(((v << 1) ^ 1), ((s + e) >> 1), e);
  seg[v] = merge(seg[(v << 1)], seg[((v << 1) ^ 1)]);
}
inline void flip(int v) {
  swap(seg[v].res1, seg[v].res2);
  swap(seg[v].l1, seg[v].l2);
  swap(seg[v].r1, seg[v].r2);
  seg[v].cl = '<' + '>' - seg[v].cl;
  seg[v].cr = '<' + '>' - seg[v].cr;
  seg[v].lazy ^= 1;
}
inline void shift(int v) {
  if (!seg[v].lazy) return;
  flip((v << 1));
  flip(((v << 1) ^ 1));
  seg[v] = merge(seg[(v << 1)], seg[((v << 1) ^ 1)]);
  seg[v].lazy = 0;
}
void change(int l, int r, int v = 1, int s = 0, int e = n) {
  if (r <= s || e <= l) return;
  if (l <= s && e <= r) {
    flip(v);
    return;
  }
  shift(v);
  change(l, r, (v << 1), s, ((s + e) >> 1));
  change(l, r, ((v << 1) ^ 1), ((s + e) >> 1), e);
  seg[v] = merge(seg[(v << 1)], seg[((v << 1) ^ 1)]);
}
node get(int l, int r, int v = 1, int s = 0, int e = n) {
  if (r <= s || e <= l) return node();
  if (l <= s && e <= r) return seg[v];
  shift(v);
  node a = get(l, r, (v << 1), s, ((s + e) >> 1));
  node b = get(l, r, ((v << 1) ^ 1), ((s + e) >> 1), e);
  return merge(a, b);
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> q;
  cin >> str;
  build();
  while (q--) {
    int l, r;
    cin >> l >> r;
    l--;
    change(l, r);
    cout << get(l, r).res1 << '\n';
  }
}
