#include<bits/stdc++.h>

using namespace std;

#define enviar {ios_base::sync_with_stdio(false);}
#define aiuda {cin.tie(NULL); cout.tie(NULL);} 

#define F_OR(i, a, b, s) for (int i=(a); (s)>0?i<(b):i>(b); i+=(s))
#define F_OR1(e) F_OR(i, 0, e, 1)
#define F_OR2(i, e) F_OR(i, 0, e, 1)
#define F_OR3(i, b, e) F_OR(i, b, e, 1)
#define F_OR4(i, b, e, s) F_OR(i, b, e, s)
#define GET5(a, b, c, d, e, ...) e
#define F_ORC(...) GET5(__VA_ARGS__, F_OR4, F_OR3, F_OR2, F_OR1)
#define FOR(...) ;F_ORC(__VA_ARGS__)(__VA_ARGS__)
#define EACH(x, a) for (auto& x: a)
#define exacto(v) cout << setprecision(v) << fixed;



#define ll long long
#define lld long double
#define eb emplace_back
#define em emplace
#define ef emplace_front
#define f first
#define s second
#define big greater<ll>()
#define bpc(x) __builtin_popcount(x)
#define bpc2(x) __builtin_clz(x)
#define DIE(args...) {print(args); return;} 

#define ar(v)  array<int,v>
#define all(v) v.begin(), v.end()
#define sz(x) (int)(x).size()
#define meminf(v) memset(v,  0x3f , sizeof(v))
#define mem(v,x) memset(v , x , sizeof v);
#define ai(a, n) for (int ele = 0; ele < n; ele++) cin >> a[ele];
#define ao(a, n) {for (int ele = 0; ele < (n); ele++) { if (ele) cout << " "; cout << a[ele]; } cout << '\n';}
#define readgraph(list, edges) for (int i = 0; i < edges; i++) {int n1, n2; cin >> n1 >> n2; n1--; n2--; list[n1].eb(n2); list[n2].eb(n1);}
 


template<class T> bool umin(T& a, const T& b) { return b<a?a=b, 1:0; }
template<class T> bool umax(T& a, const T& b) { return a<b?a=b, 1:0; } 

string to_string(bool b) {return b?"true":"false"; }

string to_string(char c) { return string(1, c);}

string to_string(const char* s) { return string(s); }

string to_string(string s) { return s; }

template<class T> string to_string(T v) { bool f=1; string res; EACH(x, v) { if(!f) res+=' '; f=0; res+=to_string(x); } return res; }

template<class A> void write(A x) { cout << to_string(x); }

void print() { write("\n"); }

template<class H, class... T> void print(const H& h, const T&... t) {  write(h); if(sizeof...(t)) write(' '); print(t...); }




typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef map<ll, ll> mll;
typedef priority_queue<int, std::vector<int>, std::greater<int>> priomin;
typedef __float128 fl;

ll mod = 1e9 + 7;
const ll maxsize =3e5 + 10;
const ll inf = 0x3f3f3f3f3f3f3f3f ;
// size, caracter

ll flip[] = {0 , 1, 5, -1, -1, 2 , -1 , -1 , 8 , -1};

void solve()
{
	ll n , k;
	
	cin >> n >> k;
	
	string s;
	
	cin >> s;
	
	mll freq;
	auto check = [&](const int pos, const char leter) -> bool
	{
		ll dif = 0;
		for( int i = 'a'; i <= 'z'; i++)
		{
			if (freq[i]%k!=0) dif += k - (freq[i]%k);
		}
		
		if (dif + pos >n) return false;
		
		string res = string( n - 1- pos -dif , 'a');
		
		
		string ans = s.substr(0 , pos) + leter; 
		
		ans += res;
		
		for( int i = 'a'; i <= 'z'; i++)
		{
			if (freq[i]%k!=0) ans += string(k - (freq[i]%k), (char)i);
		}
		print(ans);
		return true;
	};
		
	if ( n % k )
	{
		DIE( -1 );
	}	
	
	
	
	FOR(i , n) freq[s[i]]++;
	bool flag = 1;
	for( int i = 'a'; i <= 'z'; i++)
	{
			if (freq[i]%k!=0) flag =0;
	}
	
	if (flag) DIE(s);
	
	for(int i = n-1; i>=0 ; i--)
	{
		ll init = s.back();
		s.pop_back();
		freq[init]--;
		for(int j = init + 1; j <= 'z' ; j++)
		{
			freq[j]++;
			//print((char)init, (char) j);
			if (check(i, j)) return;
			freq[j]--;
		}
	}	
	
}	

int main(){
	
	enviar aiuda
	
	int tc = 1;
	cin >> tc;
	
    while(tc--)  solve();
    
	return 0;
} 
	  
	 
 

	 

 
