#include <bits/stdc++.h>
using namespace std;
using ll = int;
const ll inf = 2e18;
constexpr int N = 1e5+2;
#define pi pair<ll, ll>
#define lc p<<1
#define rc p<<1|1
ll w[26][N];
struct tree{
ll l,r,sum,add;
}tr[26][N<<2];
void pushup(ll k,ll p)
{
tr[k][p].sum=tr[k][lc].sum+tr[k][rc].sum;
}
void pushdown(ll k,ll p)
{
if(tr[k][p].add)
{
for(ll j=0;j<26;j++)
tr[j][lc].sum=tr[j][rc].sum=tr[j][lc].add=tr[j][rc].add=0;
tr[k][lc].add=tr[k][rc].add=tr[k][p].add;
tr[k][lc].sum=(tr[k][lc].r-tr[k][lc].l+1)*tr[k][p].add;
tr[k][rc].sum=(tr[k][rc].r-tr[k][rc].l+1)*tr[k][p].add;
tr[k][p].add=0;
}
}
void build(ll p,ll l,ll r,ll k)
{
tr[k][p]={l,r,w[k][l],0};
if(l==r) return;
ll m=(l+r)>>1;
build(lc,l,m,k);
build(rc,m+1,r,k);
pushup(k,p);
}
void update(ll p,ll x,ll y,ll k)
{
if(tr[k][p].l>=x&&tr[k][p].r<=y)
{
for(ll j=0;j<26;j++) tr[j][p].sum=tr[j][p].add=0;
tr[k][p].sum=(tr[k][p].r-tr[k][p].l+1)*(k+1);
tr[k][p].add=k+1;
return;
}
ll m=(tr[k][p].l+tr[k][p].r)>>1;
pushdown(k,p);
if(x<=m) update(lc,x,y,k);
if(y>m) update(rc,x,y,k);
pushup(k,p);
}
ll query(ll p,ll x,ll y,ll k)
{
if(x<=tr[k][p].l&&tr[k][p].r<=y)
return tr[k][p].sum;
ll m=(tr[k][p].l+tr[k][p].r)>>1;
pushdown(k,p);
ll sum=0;
if(x<=m) sum+=query(lc,x,y,k);
if(y>m) sum+=query(rc,x,y,k);
return sum;
}
void solve()
{
ll n,q;cin>>n>>q;
string s;cin>>s;
s=' '+s;
for(ll i=1;i<=n;i++) w[s[i]-'a'][i]=s[i]-'a'+1;
for(ll i=0;i<26;i++) build(1,1,n,i);
while(q--)
{
ll l,r;cin>>l>>r;
vector<ll>c(26);
ll ji=-1,cnt=0,be=l,en=r;;
for(ll i=0;i<26;i++) {
c[i]=query(1,l,r,i)/(i+1);
if(c[i]&1) cnt++,ji=i;
}
if(cnt>1) continue;
if(cnt==1){
ll mid=(r-l)/2+l;
c[ji]=0;
update(1,mid,mid,ji);
}
for(ll i=0;i<26;i++)
{
if(!c[i]) continue;
ll x=c[i]/2;
update(1,be,be+x-1,i);
update(1,en-x+1,en,i);
be+=x;
en-=x;
}
}
for(ll i=0;i<26;i++)
query(1,1,n,i);
for(ll i=1;i<=n;i++)
{
for(ll j=0;j<26;j++)
{
if(query(1,i,i,j))
{
cout<<char(j+'a');
break;
}
}
}
}
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T = 1;
while (T--)
solve();
return 0;
}