#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
const int N = 1e6 + 5;
int n, q, T[4 * N], lazy[4 * N];
void push(int v){
int lc = 2 * v, rc = lc + 1;
T[lc] += lazy[v];
lazy[lc] += lazy[v];
T[rc] += lazy[v];
lazy[rc] += lazy[v];
lazy[v] = 0;
}
void upd(int x, int l, int r, int v = 1, int s = 1, int e = n + 1){
if (e <= l || r <= s) return;
if (l <= s && e <= r){
T[v] += x;
lazy[v] += x;
return;
}
int lc = 2 * v, rc = lc + 1, mid = (s + e) / 2;
push(v);
upd(x, l, r, lc, s, mid);
upd(x, l, r, rc, mid, e);
T[v] = T[lc] + T[rc];
}
int query(int idx, int v = 1, int s = 1, int e = n + 1){
if (idx < s or e <= idx) return 0;
if (idx == s && e - s == 1) return T[v];
int lc = 2 * v, rc = lc + 1, mid = (s + e) / 2;
push(v);
if (idx < mid) return query(idx, lc, s, mid);
else return query(idx, rc, mid, e);
}
int main(){
cin >> n >> q;
string s; cin >> s;
s = "." + s;
for (int Q = 1; Q <= q; Q++){
char t; cin >> t;
if (t == 'a'){
int i, j; cin >> i >> j;
if (i <= j){
upd(1, i, j);
}
else {
upd(-1, j, i);
}
upd(i - j, j, j + 1);
}
else {
int i; cin >> i;
// cout << i << ' ' << query(i) << endl;
cout << s[i + query(i)] << endl;
}
}
}