// #牛客春招刷题训练营# 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];
}
}
}