//orz Gold_7
//orz SqwrIwy
//orz yzh1505
//orz yzh2019
//orz new
//orz hejinfan
//orz chenkuowen
//#pragma comment(linker,?STACK:1677721600?
//#pragma GCC optimize("O2")
//#pragma G++ optimize("O2")
//#pragma GCC optimize("O3")
//#pragma G++ optimize("O3")
//#pragma GCC optimize(3,"Ofast","inline")
//#pragma GCC target("avx,avx2")
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//typedef __int128 ll;
typedef unsigned int uint;
typedef unsigned long long ull;
//typedef double db;
typedef long double ld;
typedef pair<int,int> PII;
typedef pair<ll,int> Pli;
typedef pair<ll,ll> Pll;
typedef vector<int> VI;
typedef vector<PII> VII;
//typedef pair<ll,ll>P;
#define fi first
#define se second
#define MP make_pair
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(register int i=(int)(a);i<=(int)(b);++i)
#define per(i,a,b) for(register int i=(int)(a);i>=(int)(b);--i)
#define REP(i,n) for(int i=0;i<n;++i)
#define lowbit(x) x&(-x)
#define Rand (rand()*(1<<16)+rand())
#define id(x) ((x)<=B?(x):m-n/(x)+1)
#define fors(i) for(auto i:e[x]) if(i!=p)
//#define ls p<<1
//#define rs p<<1|1

//#define FI(n) FastIO::read(n)
//#define FO(n) FastIO::write(n)
//#define Flush FastIO::Fflush()

const int N=1111;
const int M=1111111;
const int MOD=1e9+7;
//const int MOD2=998244353;
//const int inv2=(MOD+1)/2;
const int intINF=int(2e9);
const ll llINF=ll(2e18);
const uint uintINF=~0U;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};
const long double pi=acos(-1.0L);
const int eps=222222;

int read()
{
   int v=0,f=1;
   char c=getchar();
   while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
   while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
   return v*f;
}

ll readll()
{
   ll v=0,f=1;
   char c=getchar();
   while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
   while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
   return v*f;
}

/*void pr128(__int128 x)
{
    if(x<0) putchar('-'),x=-x;
    if(x<10) return putchar('0'+x),void();
    pr128(x/10),putchar('0'+(x%10));
}*/

string ch,t;
int n,k;

void predo()
{
}

void update(string &a,const string &b)
{
    if(a.empty()||a>b) a=b;
}

void init()
{
    n=read(),k=read();
    cin>>ch;
}

void solve()
{
    t=ch;
    rep(i,0,n-1)
    {
        if(t[i]=='a'+k-1) t[i]='a';
         else if(t[i]!='a') t[i]--;
    }

    string dp[2][2];
    dp[0][0]=ch;
    int v=0;
    rep(i,0,n-1)
    {
        v^=1;
        dp[v][0]=dp[v][1]="";
        if(!dp[v^1][0].empty())
        {
            auto &s=dp[v^1][0];
            update(dp[v][0],s);
            if(i>0)
            {
                swap(s[i],s[i-1]);
                update(dp[v][0],s);
                swap(s[i],s[i-1]);
            }
            if(i+1<n)
            {
                swap(s[i],s[i+1]);
                update(dp[v][1],s);
                swap(s[i],s[i+1]);
            }
            s[i]=t[i];
            update(dp[v][0],s);
        }

        if(!dp[v^1][1].empty())
        {
            auto &s=dp[v^1][1];
            update(dp[v][0],s);
            if(i>1)
            {
                swap(s[i-1],s[i-2]);
                update(dp[v][0],s);
                swap(s[i-1],s[i-2]);
            }
            s[i-1]=t[i];
            update(dp[v][0],s);
        }
    }
    cout<<dp[v][0];
    printf("\n");
}

int main()
{
   //freopen("1.in","r",stdin);
   //freopen("1.out","w",stdout);
   predo();
   int cas=read();
   //int cas=1;
   while(cas--)
   {
       init();
       solve();
   }
   return 0;
}
