#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int tree[30][808080];
int n,m;
string s;
int tag[30][808080];
void add1(int k,int l,int r,int t)
{
tree[t][k] = 0;
tag[t][k] = -1;
}
void add2(int k,int l,int r,int t)
{
tree[t][k] = r - l + 1;
tag[t][k] = 1;
}
void pushdown(int k,int l,int r,int t)
{
if(!tag[t][k])return;
int mid = l + r >> 1;
if(tag[t][k] == -1)
{
add1(k << 1,l,mid,t);
add1(k << 1|1,mid + 1,r,t);
}
else
{
add2(k << 1,l,mid,t);
add2(k << 1|1,mid + 1,r,t);
}
tag[t][k] = 0;
}
void add(int k,int l,int r,int u,int v,int t)
{
if(u <= l && r <= v)
{
tree[t][k] = r - l + 1;
tag[t][k] = 1;
return;
}
pushdown(k,l,r,t);
int mid = l + r >> 1;
if(u <= mid)add(k << 1,l,mid,u,v,t);
if(v > mid)add(k << 1|1,mid + 1,r,u,v,t);
tree[t][k] = tree[t][k << 1] + tree[t][k << 1|1];
}
void rem(int k,int l,int r,int u,int v,int t)
{
if(u <= l && r <= v)
{
tree[t][k] = 0;
tag[t][k] = -1;
return;
}
pushdown(k,l,r,t);
int mid = l + r >> 1;
if(u <= mid)rem(k << 1,l,mid,u,v,t);
if(v > mid)rem(k << 1|1,mid + 1,r,u,v,t);
tree[t][k] = tree[t][k << 1] + tree[t][k << 1|1];
}
int ans;
void query(int k,int l,int r,int u,int v,int t)
{
if(u <= l && r <= v)
{
ans += tree[t][k];
return;
}
pushdown(k,l,r,t);
int mid = l + r >> 1;
if(u <= mid)query(k << 1,l,mid,u,v,t);
if(v > mid)query(k << 1|1,mid + 1,r,u,v,t);
}
void pr()
{
for(int i = 1; i <= n; i++)
{
for(int j = 0; j < 26; j++)
{
ans = 0;
query(1,1,n,i,i,j);
if(ans)
{
cout << char(j + 'a');
break;
}
}
}
cout << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
cin >> s;
for(int i = 0; i < n; i++)
{
add(1,1,n,i + 1,i + 1,s[i] - 'a');
}
for(int I = 1; I <= m; I++)
{
int l,r; cin >> l >> r;
int od = -1, sum[30], fl = 1;
memset(sum,0,sizeof(sum));
for(int i = 0; i < 26; i++)
{
ans = 0;
query(1,1,n,l,r,i);
sum[i] = ans;
if(ans && ans % 2 == 1)
{
if(od == -1)od = i;
else
{
fl = 0;
break;
}
}
}
if(!fl)continue;
for(int i = 0; i < 26; i++)
{
rem(1,1,n,l,r,i);
}
int beg = l,en = r;
for(int i = 0; i < 26; i++)
{
if(sum[i] && sum[i] % 2 == 0)
{
add(1,1,n,beg,beg + sum[i] / 2 - 1,i);
add(1,1,n,en - sum[i] / 2 + 1,en,i);
beg = beg + sum[i] / 2;
en = en - sum[i] / 2;
}
}
if(od != -1)add(1,1,n,beg,en,od);
}
pr();
return 0;
}