#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <bits/stdc++.h>
/*#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline") //Optimization flags
#pragma GCC option("arch=native","tune=native","no-zero-upper") //Enable AVX
#pragma GCC target("avx2")  //Enable AVX*/

using namespace std;

using ll = long long;

#define mp make_pair

const int p = 998244353;


int mul(int a, int b) {
    return (1LL * a * b) % p;
}

int add(int a, int b) {
    int s = (a+b);
    if (s>=p) s-=p;
    return s;
}

int sub(int a, int b) {
    int s = (a+p-b);
    if (s>=p) s-=p;
    return s;
}

int po(int a, int deg)
{
    if (deg==0) return 1;
    if (deg%2==1) return mul(a, po(a, deg-1));
    int t = po(a, deg/2);
    return mul(t, t);
}

int inv(int n)
{
    return po(n, p-2);
}

/*struct DSU {
    vector<int> sz;
    vector<int> parent;

    void make_set(int v) {
        parent[v] = v;
        sz[v] = 1;
    }

    int find_set(int v) {
        if (v == parent[v])
            return v;
        return parent[v] = find_set(parent[v]);
    }

    void union_sets(int a, int b) {
        a = find_set(a);
        b = find_set(b);
        if (a != b) {
            if (sz[a] < sz[b])
                swap(a, b);
            parent[b] = a;
            sz[a] += sz[b];
        }
    }

    DSU(int n) {
        sz.resize(n);
        parent.resize(n);
        for (int i = 0; i < n; i++) make_set(i);
    }
};*/

/*const int N = 1000000;

vector<int> facs(N), invfacs(N);

void init()
{
    facs[0] = 1;
    for (int i = 1; i<N; i++) facs[i] = mul(facs[i-1], i);
    invfacs[N-1] = inv(facs[N-1]);
    for (int i = N-2; i>=0; i--) invfacs[i] = mul(invfacs[i+1], i+1);
}

int C(int n, int k)
{
    return mul(facs[n], mul(invfacs[k], invfacs[n-k]));
}*/



int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr);

    int n, k;
    cin>>n>>k;
    string s;
    cin>>s;

    if (n==1)
    {
        if (k%2==0) cout<<s;
        else
        {
            if (s=="A") cout<<"B";
            else cout<<"A";
        }
        return 0;
    }

    deque<int> a;
    char first = s[0];
    int cur = 1;
    for (int i = 1; i<n; i++)
    {
        if (s[i]==s[i-1]) cur++;
        else
        {
            a.push_back(cur);
            cur = 1;
        }
    }
    a.push_back(cur);
    //cout<<first<<endl;
    //for (auto it: a) cout<<it<<' ';

    //cout<<"Here"<<endl;

    int iter = min(2*n, k);
    if (iter%2!=k%2) iter++;


    for (int i = 0; i<iter; i++)
    {
        //cout<<i<<":\n";
        if (first=='A')
        {
            if (a.front()>1)
            {
                int res = a.front();
                a.pop_front();
                a.push_front(res-1);
                a.push_front(1);
            }
            else
            {
                a.pop_front();
                int res = a.front();
                a.pop_front();
                a.push_front(res+1);
            }
            first = 'B';
        }
        else
        {
            if (a.front()>1)
            {
                int res = a.front();
                a.pop_front();
                a.push_front(res-1);
            }
            else
            {
                a.pop_front();
                first = 'A';
            }
            if (first=='A') first = 'B';
            else first = 'A';
            if ((first == 'A' && a.size()%2==0)||(first == 'B' && a.size()%2==1))
            {
                a.push_back(1);
            }
            else
            {
                int res = a.back();
                a.pop_back();
                a.push_back(res+1);
            }
        }
    }

    for (auto it: a)
    {
        for (int i = 0; i<it; i++) cout<<first;
        if (first=='A') first = 'B';
        else first = 'A';
    }


}



Measured memory_bytes: 1560