#include<bits/stdc++.h>
#define int long long
#define N 200009
using namespace std;
int n,m,a[N];
struct Node{
int l,r,sum,flag;
}tr[N][29];
void pushup(int u,int id){
tr[u][id].sum=tr[u<<1][id].sum+tr[u<<1|1][id].sum;
}
void eval(Node &t,int flag){
if(flag==-1){
return ;
}
t.sum=(t.r-t.l+1)*flag;
t.flag=flag;
}
void pushdown(int u,int id){
eval(tr[u<<1][id],tr[u][id].flag);
eval(tr[u<<1|1][id],tr[u][id].flag);
tr[u][id].flag=-1;
}
void build(int u,int l,int r,int id){
tr[u][id].l=l,tr[u][id].r=r,tr[u][id].sum=0,tr[u][id].flag=-1;
if(l==r){
tr[u][id].sum=(a[l]==id);
return ;
}
int mid=(l+r)>>1;
build(u<<1,l,mid,id);
build(u<<1|1,mid+1,r,id);
pushup(u,id);
}
void modify(int u,int l,int r,int x,int id){
if(tr[u][id].l>=l&&tr[u][id].r<=r){
eval(tr[u][id],x);
return ;
}
pushdown(u,id);
int mid=(tr[u][id].l+tr[u][id].r)>>1;
if(l<=mid){
modify(u<<1,l,r,x,id);
}
if(r>mid){
modify(u<<1|1,l,r,x,id);
}
pushup(u,id);
}
int query(int u,int l,int r,int id){
if(tr[u][id].l>=l&&tr[u][id].r<=r){
return tr[u][id].sum;
}
pushdown(u,id);
int mid=(tr[u][id].l+tr[u][id].r)>>1,ans=0;
if(l<=mid){
ans+=query(u<<1,l,r,id);
}
if(r>mid){
ans+=query(u<<1|1,l,r,id);
}
return ans;
}
void print(){
for(int i=1;i<=n;i++){
int pos;
for(int j='a';j<='z';j++){
if(query(1,i,i,(int)(j-'a'))>0){
pos=(int)(j-'a');
break;
}
}
cout<<(char)(pos+'a');
}
}
signed main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
char c;
cin>>c;
a[i]=(int)(c-'a');
}
for(int i='a';i<='z';i++){
build(1,1,n,(int)(i-'a'));
}
int sum[26];
for(int i=1;i<=m;i++){
int l,r;
cin>>l>>r;
int odd=0,pos;
for(int j='a';j<='z';j++){
sum[(int)(j-'a')]=query(1,l,r,(int)(j-'a'));
if(sum[(int)(j-'a')]%2==1){
odd++;
pos=(int)(j-'a');
}
}
if(odd>1){
continue;
}
for(int j='a';j<='z';j++){
modify(1,l,r,0,(int)(j-'a'));
}
int lpos=l,rpos=r;
if(odd==1){
modify(1,(l+r)>>1,(l+r)>>1,1,pos);
sum[pos]--;
}
for(int j='a';j<='z';j++){
if(!sum[(int)(j-'a')]){
continue;
}
modify(1,lpos,lpos+sum[(int)(j-'a')]/2-1,1,(int)(j-'a'));
lpos=lpos+sum[(int)(j-'a')]/2-1+1;
modify(1,rpos-sum[(int)(j-'a')]/2+1,rpos,1,(int)(j-'a'));
rpos=rpos-sum[(int)(j-'a')]/2+1-1;
}
}
print();
return 0;
}