//  #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  string s;
  size_t size;
  int q;
  cin >> size >> q;
  cin >> s;
  vector<int> a(size, 1);//-------给每个字母一个位置,上面的字母个数初始为1
  int len, l, r;
  while(q--){
    cin >> l >> r;
    len = r - l + 1;//--------一共可以复制几份
    l--;
    int ls = 0;
    while(l > 0){//--------转化索引
      l -= a[ls];
      ls++;
    }
    if (ls > 0){//---------纠正,主要正对前面减多了(l<0)(没有刚刚好踩在两个字母之间)
      a[ls - 1] -= l;
      len += l;
    }
    while(len > 0){//----------------翻倍
      if (a[ls] <= len){
        len -= a[ls];
        a[ls] *= 2;
      }
      else{
        a[ls] += len;
        len = 0;
      }
      ls++;
    }
  }
  for (int i = 0; i < size; i++){
    while(a[i]--){
      cout << s[i];
    }
  }
}