#include <bits/stdc++.h>
using namespace std;

char judge(char a, char b){
  if(a=='R'){
    if(b=='R'){
      return 'R';
    }else if(b=='P'){
      return 'P';
    }else if(b=='S'){
      return 'R';
    }
  }else if(a=='P'){
    if(b=='R'){
      return 'P';
    }else if(b=='P'){
      return 'P';
    }else if(b=='S'){
      return 'S';
    }
  }else if(a=='S'){
    if(b=='R'){
      return 'R';
    }else if(b=='P'){
      return 'S';
    }else if(b=='S'){
      return 'S';
    }
  }
}

int main(){
  int n,k;
  cin >> n >> k;
  string s;
  cin >> s;
  for(int i=0;i<k;i++){
    string tmp="";
    if(s.size()%2!=0){
      s+=s;
    }
    for(int j=0;j<s.size();j+=2){
      tmp+=judge(s.at(j),s.at(j+1));
    }
    s=tmp;
  }
  cout << s.front() << endl;
  return 0;
}

#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(a) a.begin(), a.end()
#define ff(i,a,b) for(int i=a;i<=b;i++)
#define fb(i,b,a) for(int i=b;i>=a;i--)

using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 300005;
const int inf = 1e9 + 5;

int n, q;
ll niz[maxn];

ll bor[4*maxn][35];
void build(int v, int tl, int tr, int k){
    if(tl == tr){
//        bor[v][k] = ((niz[tl] & (1 << k)) == 1 ? 1 : 0);
        if(niz[tl] & (1LL << k))bor[v][k] = 1;
        else bor[v][k] = 0;
        return;
    }
    int mid = (tl + tr)/2;
    build(v*2, tl, mid, k);
    build(v*2+1, mid+1, tr, k);
    bor[v][k] = bor[v*2][k] + bor[v*2+1][k];
}
void update(int v, int tl, int tr, int poz, int vre, int k){
    if(tl == tr){
        bor[v][k] += vre;
        return;
    }
    int mid = (tl+tr)/2;
    if(poz <= mid)update(v*2,tl,mid,poz,vre,k);
    else update(v*2+1,mid+1,tr,poz,vre,k);
    bor[v][k] = bor[v*2][k] + bor[v*2+1][k];
}
int kveri(int v, int tl, int tr, int l, int r, int k){
    if(tl > r | l > tr)return 0;
    if(l <= tl && r >= tr)return bor[v][k];
    int mid = (tl + tr)/2;
    return kveri(v*2,tl,mid,l,r,k) + kveri(v*2+1,mid+1,tr,l,r,k);
}

int main()
{
    ios::sync_with_stdio(false);
    cout.tie(nullptr);
    cin.tie(nullptr);
    cin >> n >> q;
    ff(i,1,n)cin >> niz[i];
    ff(mask,0,30)build(1,1,n,mask);
//    build(1,1,n,2);
    while(q--){
        int t;
        cin >> t;
        if(t == 1){
            int poz;
            ll x;
            cin >> poz >> x;
            ff(mask,0,30){
                if(!(x & (1 << mask)))continue;
                int koji = kveri(1,1,n,poz,poz,mask);
//                cout << "mask: " << mask << endl;
//                cout << "koji: " << koji << endl;
                if(koji == 0)update(1,1,n,poz,1,mask);
                if(koji == 1)update(1,1,n,poz,-1,mask);
//                cout << endl;
            }
        }
        if(t == 2){
            int l, r;
            cin >> l >> r;
            ll ans = 0;
            ff(mask,0,30){
                int kol = kveri(1,1,n,l,r,mask);
//                cout << "kol: " << kol << endl;
                ans += (kol % 2 == 1) * (1LL << mask);
            }
            cout << ans << endl;
        }
    }
    return 0;
}
/**

**/

