#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int n,k,sum[MAXN][30];
int cnt[30];
string s;
int check(int i){
    for(int j=s[i]-'a'+1;j<26;j++){//每个位置还可以枚举比原位置大的字母
        memset(cnt,0,sizeof(cnt));
        int have=n-i-1;//再i位置之后还有n-i-1个位置可以放字母
        for(int x=0;x<26;x++){
            int temp=sum[i][x];
            if(x==s[i]-'a') temp--;
            if(x==j) temp++;
            have-=(k-temp%k)%k;
            cnt[x]+=(k-temp%k)%k;//某类字母还需多少个
            if(have<0)//若不够，你肯定不成立
                break;
        }
        if(have<0) continue;
        cnt[0]+=have;
        return j;
    }
    return 0;
}
string getans(int i,int j){
    string ans=s.substr(0,i)+char(j+'a');
    for(int x=0;x<26;x++){
        ans+=string(cnt[x],x+'a');
    }
    return ans;
}
void solve(){
    if(n%k>0){
        cout<<-1<<'\n';
        return ;
    }
    int ok=true;
    for(int i=0;i<n;i++){
        for(int j=0;j<26;j++){
            if(i==0){
                sum[i][j]=0;
                if(j==s[i]-'a')
                    sum[i][j]++;
                continue;
            }
            sum[i][j]=sum[i-1][j];
            if(j==s[i]-'a'){
                sum[i][j]++;
            }
        }
    }
    for(int i=0;i<26;i++){
        if(sum[n-1][i]%k!=0){
            ok=false;
            break;
        }
    }
    if(ok){
        cout<<s<<'\n';
        return ;
    }
    for(int i=n-1;i>=0;i--){//逆序枚举每一个位置
        int flag=check(i);
        if(flag){
            cout<<getans(i,flag)<<'\n';
            return ;
        }
    }
    return ;
}
int main(){
    ios::sync_with_stdio(false);
    int t;cin>>t;
    while(t--){
        cin>>n>>k>>s;
        solve();
    }
    return 0;
}
