#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    vector<ll> vect3;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
        vect3.push_back(num);
    }
    sort(vect3.begin(), vect3.end());
    for(ll i=0; i<k; i++)
    {
        s+=vect3[i];
    }
    /*if(count==-1)
    {
        cout<<"-1"<<endl;
    }*/
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            map[vect[i]]++;
            vect2.push_back(vect[i]);
        }
    }
    if(vect.size()!=1&&s<=vect3[vect3.size()-1]&&vect2.size()==vect.size())
    {
        cout<<"-1"<<endl;
        return;
    }
    if(vect2.size()==vect.size())
    {
        cout << vect.size()*2<<endl;
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        cout<<endl;
        return;
    }
    ll siz=0;
    while(siz<n)
    {
        siz+=vect2.size();
    }
    cout<<siz<<endl;
    ll loop=0;
    while(loop<n)
    {
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        loop+=vect2.size();
    }
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
    }
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            vect2.push_back(vect[i]);
        }
        map[vect[i]]++;
    }
    if(map.size()>k)
    {
        cout<<"-1"<<endl;
        return;
    }
    ll siz=0;
    cout<<k*n<<endl;
    ll loop=0;
    for(ll i=0; i<n; i++)
    {
        if(vect2.size()<k)
            if(map[i+1]==0)
                {
                    map[i+1]++;
                    vect2.push_back(i+1);
                }
    }
    for(ll i=0; i<n; i++)
    for(ll i1=0; i1<k ; i1++)
    cout<<vect2[i]<<" ";
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
    }
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            map[vect[i]]++;
            vect2.push_back(vect[i]);
        }
    }
    if(map.size()>k)
    {
        cout<<"-1"<<endl;
        return;
    }
    ll siz=0;
    cout<<vect2.size()*n<<endl;
    ll loop=0;
    while(loop<n)
    {
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        loop+=1;
    }
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
    }
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            vect2.push_back(vect[i]);
        }
        map[vect[i]]++;
    }
    if(map.size()>k)
    {
        cout<<"-1"<<endl;
        return;
    }
    ll siz=0;
    cout<<k*n<<endl;
    ll loop=0;
    for(ll i=0; i<n; i++)
    {
        if(vect2.size()<k)
            if(map[i+1]==0)
                {
                    map[i+1]++;
                    vect2.push_back(i+1);
                }
    }
    for(ll i=0; i<n; i++)
    for(ll i1=0; i1<k ; i1++)
    cout<<vect2[i1]<<" ";
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
    }
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            vect2.push_back(vect[i]);
        }
        map[vect[i]]++;
    }
    if(map.size()>k)
    {
        cout<<"-1"<<endl;
        return;
    }
    ll siz=0;
    cout<<k*n<<endl;
    ll loop=0;
    for(ll i=0; i<n; i++)
    {
        if(vect2.size()<k)
            if(map[i]==0)
                {
                    map[i]++;
                    vect2.push_back(i);
                }
    }
    for(ll i=0; i<n; i++)
    for(ll i1=0; i1<k ; i1++)
    cout<<vect2[i]<<" ";
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    vector<ll> vect;
    vector<ll> vect2;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
        if(check<=num)
        {
            count=-1;
        }
        check+=num;
    }
    /*if(count==-1)
    {
        cout<<"-1"<<endl;
    }*/
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            map[vect[i]]++;
            vect2.push_back(vect[i]);
        }
    }
    if(vect.size()==vect2.size()&&map.find(k*(k+1)/2)!=map.end())
    {
        cout<<"-1"<<endl;
        return;
    }
    ll siz=0;
    while(siz<n)
    {
        siz+=vect2.size();
    }
    cout<<siz<<endl;
    ll loop=0;
    while(loop<n)
    {
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        loop+=vect2.size();
    }
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    vector<ll> vect3;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
        vect3.push_back(num);
    }
    sort(vect3.begin(), vect3.end());
    for(ll i=0; i<k; i++)
    {
        s+=vect3[i];
    }
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            map[vect[i]]++;
            vect2.push_back(vect[i]);
        }
    }
    if(vect.size()!=1&&s<=vect3[vect3.size()-1])
    {
        cout<<"-1"<<endl;
        return;
    }
    if(vect2.size()==vect.size())
    {
        cout << vect.size()*2<<endl;
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        cout<<endl;
        return;
    }
    ll siz=0;
    while(siz<n)
    {
        siz+=vect2.size();
    }
    cout<<siz<<endl;
    ll loop=0;
    while(loop<n)
    {
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        loop+=1;
    }
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    vector<ll> vect3;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
        vect3.push_back(num);
    }
    sort(vect3.begin(), vect3.end());
    for(ll i=0; i<k; i++)
    {
        s+=vect3[i];
    }
    /*if(count==-1)
    {
        cout<<"-1"<<endl;
    }*/
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            map[vect[i]]++;
            vect2.push_back(vect[i]);
        }
    }
    if(vect.size()!=1&&s<=vect3[vect3.size()-1])
    {
        cout<<"-1"<<endl;
        return;
    }
    if(vect2.size()==vect.size())
    {
        cout << vect.size()*2<<endl;
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        cout<<endl;
        return;
    }
    ll siz=0;
    while(siz<n)
    {
        siz+=vect2.size();
    }
    cout<<siz<<endl;
    ll loop=0;
    while(loop<n)
    {
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        loop+=vect2.size();
    }
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    vector<ll> vect3;
    unordered_map<ll, ll> map2;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
        if(map2.find(num)==map2.end())
        {
            vect3.push_back(num);
            map2[num]++;
        }
    }
    sort(vect3.begin(), vect3.end());
    for(ll i=0; i<k; i++)
    {
        s+=vect3[i];
    }
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            map[vect[i]]++;
            vect2.push_back(vect[i]);
        }
    }
    if((vect.size()!=1&&s<=vect3[vect3.size()-1])||vect3.size()>k)
    {
        cout<<"-1"<<endl;
        return;
    }
    if(vect2.size()==vect.size())
    {
        cout << vect.size()*2<<endl;
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        cout<<endl;
        return;
    }
    ll siz=0;
    while(siz<n)
    {
        siz+=vect2.size();
    }
    cout<<vect2.size()*n<<endl;
    ll loop=0;
    while(loop<n)
    {
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        loop+=1;
    }
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    vector<ll> vect3;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
        vect3.push_back(num);
    }
    sort(vect3.begin(), vect3.end());
    for(ll i=0; i<k; i++)
    {
        s+=vect3[i];
    }
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            map[vect[i]]++;
            vect2.push_back(vect[i]);
        }
    }
    if(vect.size()!=1&&s<=vect3[vect3.size()-1])
    {
        cout<<"-1"<<endl;
        return;
    }
    if(vect2.size()==vect.size())
    {
        cout << vect.size()*2<<endl;
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        cout<<endl;
        return;
    }
    ll siz=0;
    while(siz<n)
    {
        siz+=vect2.size();
    }
    cout<<vect2.size()*n<<endl;
    ll loop=0;
    while(loop<n)
    {
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        loop+=1;
    }
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
    }
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            vect2.push_back(vect[i]);
        }
        map[vect[i]]++;
    }
    if(map.size()>k)
    {
        cout<<"-1"<<endl;
        return;
    }
    ll siz=0;
    cout<<k*n<<endl;
    ll loop=0;
    for(ll i=0; i<n; i++)
    {
        if(vect2.size()<k)
            if(map[i]==0)
                {
                    map[i]++;
                    vect2.push_back(i);
                }
    }
    for(ll i=0; i<n; i++)
    for(ll i1=0; i<k ; i1++)
    cout<<vect2[i]<<" ";
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    vector<ll> vect3;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
        vect3.push_back(num);
    }
    sort(vect3.begin(), vect3.end());
    for(ll i=0; i<k; i++)
    {
        s+=vect3[i];
    }
    /*if(count==-1)
    {
        cout<<"-1"<<endl;
    }*/
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            map[vect[i]]++;
            vect2.push_back(vect[i]);
        }
    }
    if(vect.size()!=1&&s<=vect3[vect3.size()-1]&&vect2.size()==vect.size())
    {
        cout<<"-1"<<endl;
        return;
    }
    ll siz=0;
    while(siz<n)
    {
        siz+=vect2.size();
    }
    cout<<siz<<endl;
    ll loop=0;
    while(loop<n)
    {
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        loop+=vect2.size();
    }
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


#include <bits/stdc++.h>
#include<vector>
#define ll long long int
#define ull unsigned long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
void solve()
{
    ll n, k, j=1, check=0, count=0;
    cin>>n>>k;
    ll s=0;
    vector<ll> vect;
    vector<ll> vect2;
    vector<ll> vect3;
    unordered_map<ll, ll> map2;
    for(ll i=0; i<n; ++i )
    {
        ll num;
        cin>>num;
        vect.push_back(num);
        if(map2.find(num)==map2.end())
        {
            vect3.push_back(num);
            map2[num]++;
        }
    }
    sort(vect3.begin(), vect3.end());
    for(ll i=0; i<k; i++)
    {
        s+=vect3[i];
    }
    unordered_map<ll, ll> map;
    for(ll i=0; i<n; i++)
    {
        if(map.find(vect[i])==map.end())
        {
            map[vect[i]]++;
            vect2.push_back(vect[i]);
        }
    }
    if(vect.size()!=1&&s<=vect3[vect3.size()-1])
    {
        cout<<"-1"<<endl;
        return;
    }
    if(vect2.size()==vect.size())
    {
        cout << vect.size()*2<<endl;
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        cout<<endl;
        return;
    }
    ll siz=0;
    while(siz<n)
    {
        siz+=vect2.size();
    }
    cout<<vect2.size()*n<<endl;
    ll loop=0;
    while(loop<n)
    {
        for(ll i=0; i<vect2.size(); i++)
        {
            cout<<vect2[i]<<" ";
        }
        loop+=1;
    }
    cout<<endl;
}
int main() {
    ll tests;
    cin>>tests;
    while(tests--)
    solve();
}


/*
if not done today , will do it tommorrow !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
#include<bits/stdc++.h>
using namespace std;
#include<string.h>
#define ll long long
#define max_pq priority_queue<ll>
#define min_pq priority_queue<ll,vector<ll>,greater<ll> >
#define F(n) for(ll i=0;i<n;i++)
#define F2(n,m) for(ll i=n;i<m;i++)
#define pp pair<ll,ll>
#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);
#define f first
#define s second
#define pb push_back
#define mod 1000000007      // 10e9 +7
#define N 100005    // 10e5
ll prime[N],dist[N],fact[N+5],catalan[N];
bool vis[N];
vector<pair<ll,ll> > vec[N];
vector<ll> adj[N];
/*
void dijkstra(ll src)
{
    memset(vis,false,sizeof(vis));
    dist[src]=0;
    priority_queue<pp,vector<pp>,greater<pp> > pq;
    pq.push({0,src});
    while(!pq.empty())
    {
        pp p=pq.top();
        pq.pop();
        ll x=p.s;
        ll wei=p.f;
        if(vis[x]) continue;
        vis[x]=true;
        for(ll i=0;i<vec[x].size();i++)
        {
            ll e=vec[x][i].f;
            ll w=vec[x][i].s;
            if(dist[x]+w <dist[e]){
                dist[e]=dist[x]+w;
                pq.push({dist[e],e});
            }
        }
    }
}
ll prim(ll src)
{
    priority_queue<pp,vector<pp>,greater<pp> > Q;
    ll y,mincost=0;
    pp p;
    Q.push({0,src});
    while(!Q.empty())
    {
        p=Q.top();
        Q.pop();
        src=p.s;
        if(vis[src]==true)
            continue;
        vis[src]=true;
        mincost+=p.f;
        for(ll i=0;i<vec[src].size();i++)
        {
            y=vec[src][i].s;
            if(vis[y]==false)
            Q.push({vec[src][i].f,y});
        }
    }
    return mincost;
}

string I_to_S(ll n)
{
    string s=to_string(n);
    return s;
}
ll S_to_I(string s)
{
    return atoi(s.c_str());
}
ll svalue(string s)
{
    ll res=0;
    for(ll i=0;i<s.length();i++)
        res+=(s[i]-0);
    return res;
}
string to_upper(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=toupper(c);
    });
    return s;
}
string to_lower(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=tolower(c);
    });
    return s;
}
string D_to_B(ll n)
{
    return bitset<32>(n).to_string();
}*/
/*
ll lcm(ll a,ll b)
{
    ll x=(a*b)/__gcd(a,b);
    return x;
}
ll gcd(ll a,ll b)
{
    return __gcd(a,b);
}
void sieve()
{
    for(ll i=0;i<N;i++)
        prime[i]=0;
    prime[0]=1;
    prime[1]=1;
    for(ll i=2;i*i<=N;i++)
    {
        if(!prime[i])
        {
            for(ll j=2*i;j<=N;j+=i)
                prime[j]=1;
        }
    }
}
ll toitient(ll n)
{
    ll result=n;
    for(ll p=2;p*p<=n;++p)
    {
        if(n%p==0)
        {
            while(n%p==0)
                n=n/p;
            result-=(result/p);
        }
    }
    if(n>1)
        result-=(result/n);
    return result;
}
ll factorcount(ll n)
{
    ll total=1;
    for(ll p=2;p<=n;p++)
    {
        if(!prime[p])
        {
            ll count1=0;
            if(n%p==0)
            {
                while(n%p==0)
                {
                    n=n/p;
                    count1++;
                }
                total=total*(count1+1);
            }
        }
    }
    return total;
}
ll longestincr(ll a[],ll n)
{
    ll ans[n+1];
    ans[0]=1;
    for(ll i=1;i<n;i++)
    {
        ans[i]=1;
        for(ll j=i-1;j>=0;j--)
        {
            if(a[j]<a[i])
                ans[i]=max(ans[i],1+ans[j]);
        }
    }
    return *max_element(ans,ans+n);
}
ll power(ll x,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1)
            res=((res%mod)*(x%mod))%mod;
        x=((x%mod)*(x%mod))%mod;
        n=n>>1;
    }
    return res;
}
void factorial()
{
    fact[0]=1;
    for(ll i=1;i<=N;i++)
        fact[i]=(fact[i-1]%mod *i)%mod;
}
ll inverse(ll x,ll n)
{
    return power(x,n)%mod;
}
ll nCr(ll n,ll r)
{
    ll x=((fact[r]%mod)*(fact[n-r]%mod))%mod;
    x=inverse(x,mod-2);
    return ((fact[n]%mod)*(x%mod))%mod;

}
void catalanDP()
{
    catalan[0]=catalan[1]=1;
    for(ll i=2;i<=N;i++)
    {
        catalan[i]=0;
        for(ll j=0;j<i;j++)
            catalan[i]+=(catalan[j]*catalan[i-j-1]);
    }
}
void computeLPS(string pat,ll M,ll *lps)
{
    ll len=0;
    lps[0]=0;
    ll i=1;
    while(i<M)
    {
        if(pat[i]==pat[len])
        {
            len++;
            lps[i]=len;
            i++;
        }
        else
        {
            if(len!=0)
                len=lps[len-1];
            else
            {
                lps[i]=0;
                i++;
            }
        }
    }
}
void KMP(string pat,string txt)
{
    ll M=pat.length();
    ll n=txt.length();
    ll lps[M];
    computeLPS(pat,M,lps);
    ll i=0,j=0;
    while(i<n)
    {
        if(pat[j]==txt[i])
        {
            i++;j++;
        }
        if(j==M)
        {
            cout<<"pattern found at "<<i-j<<endl;
            j=lps[j-1];
        }
        else if(i<n && pat[j]!=txt[i])
        {
            if(j!=0)
                j=lps[j-1];
            else
                i++;
        }
    }
}
ll inv(ll a,ll m)
{
    ll m0=m,t,q,x0=0,x1=1;
    if(m==1)
        return 0;
    while(a>1)
    {
        q=a/m;
        t=m;
        m=a%m,a=t;
        t=x0;
        x0=x1-q*x0;
        x1=t;
    }
    if(x1<0)
        x1+=m0;
    return x1;
}
ll CRT(ll num[],ll rem[],ll k)
{
    ll prod=1;
    for(ll i=0;i<k;i++)
        prod*=num[i];
    ll result=0;
    for(ll i=0;i<k;i++)
    {
        ll p=prod/num[i];
        result+=rem[i]*inv(p,num[i])*p;
    }
    return result%prod;
}*/
void solve()
{
    ll n,k,x;
    set<ll>st;
    cin>>n>>k;
    F(n)
    {
        cin>>x;
        st.insert(x);
    }
    if(st.size()>k)
    {
        cout<<"-1"<<'\n';
        return ;
    }
    else
    {
        cout<<n*k<<endl;
        F(n)
        {
            for(int b:st)
                cout<<b<<' ';
            for(ll j=0;j<k-(int)st.size();j++)
                cout<<1<<' ';
        }
        cout<<'\n';
    }
}
int main()
{
    ll t;
    boost;
    cin>>t;
    while(t--)
        solve();
}


/*
if not done today , will do it tommorrow !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
#include<bits/stdc++.h>
using namespace std;
#include<string.h>
#define ll long long
#define max_pq priority_queue<ll>
#define min_pq priority_queue<ll,vector<ll>,greater<ll> >
#define F(n) for(ll i=0;i<n;i++)
#define F2(n,m) for(ll i=n;i<m;i++)
#define pp pair<ll,ll>
#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);
#define f first
#define s second
#define pb push_back
#define mod 1000000007      // 10e9 +7
#define N 100005    // 10e5
ll prime[N],dist[N],fact[N+5],catalan[N];
bool vis[N];
vector<pair<ll,ll> > vec[N];
vector<ll> adj[N];
/*
void dijkstra(ll src)
{
    memset(vis,false,sizeof(vis));
    dist[src]=0;
    priority_queue<pp,vector<pp>,greater<pp> > pq;
    pq.push({0,src});
    while(!pq.empty())
    {
        pp p=pq.top();
        pq.pop();
        ll x=p.s;
        ll wei=p.f;
        if(vis[x]) continue;
        vis[x]=true;
        for(ll i=0;i<vec[x].size();i++)
        {
            ll e=vec[x][i].f;
            ll w=vec[x][i].s;
            if(dist[x]+w <dist[e]){
                dist[e]=dist[x]+w;
                pq.push({dist[e],e});
            }
        }
    }
}
ll prim(ll src)
{
    priority_queue<pp,vector<pp>,greater<pp> > Q;
    ll y,mincost=0;
    pp p;
    Q.push({0,src});
    while(!Q.empty())
    {
        p=Q.top();
        Q.pop();
        src=p.s;
        if(vis[src]==true)
            continue;
        vis[src]=true;
        mincost+=p.f;
        for(ll i=0;i<vec[src].size();i++)
        {
            y=vec[src][i].s;
            if(vis[y]==false)
            Q.push({vec[src][i].f,y});
        }
    }
    return mincost;
}

string I_to_S(ll n)
{
    string s=to_string(n);
    return s;
}
ll S_to_I(string s)
{
    return atoi(s.c_str());
}
ll svalue(string s)
{
    ll res=0;
    for(ll i=0;i<s.length();i++)
        res+=(s[i]-0);
    return res;
}
string to_upper(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=toupper(c);
    });
    return s;
}
string to_lower(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=tolower(c);
    });
    return s;
}
string D_to_B(ll n)
{
    return bitset<32>(n).to_string();
}*/
/*
ll lcm(ll a,ll b)
{
    ll x=(a*b)/__gcd(a,b);
    return x;
}
ll gcd(ll a,ll b)
{
    return __gcd(a,b);
}
void sieve()
{
    for(ll i=0;i<N;i++)
        prime[i]=0;
    prime[0]=1;
    prime[1]=1;
    for(ll i=2;i*i<=N;i++)
    {
        if(!prime[i])
        {
            for(ll j=2*i;j<=N;j+=i)
                prime[j]=1;
        }
    }
}
ll toitient(ll n)
{
    ll result=n;
    for(ll p=2;p*p<=n;++p)
    {
        if(n%p==0)
        {
            while(n%p==0)
                n=n/p;
            result-=(result/p);
        }
    }
    if(n>1)
        result-=(result/n);
    return result;
}
ll factorcount(ll n)
{
    ll total=1;
    for(ll p=2;p<=n;p++)
    {
        if(!prime[p])
        {
            ll count1=0;
            if(n%p==0)
            {
                while(n%p==0)
                {
                    n=n/p;
                    count1++;
                }
                total=total*(count1+1);
            }
        }
    }
    return total;
}
ll longestincr(ll a[],ll n)
{
    ll ans[n+1];
    ans[0]=1;
    for(ll i=1;i<n;i++)
    {
        ans[i]=1;
        for(ll j=i-1;j>=0;j--)
        {
            if(a[j]<a[i])
                ans[i]=max(ans[i],1+ans[j]);
        }
    }
    return *max_element(ans,ans+n);
}
ll power(ll x,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1)
            res=((res%mod)*(x%mod))%mod;
        x=((x%mod)*(x%mod))%mod;
        n=n>>1;
    }
    return res;
}
void factorial()
{
    fact[0]=1;
    for(ll i=1;i<=N;i++)
        fact[i]=(fact[i-1]%mod *i)%mod;
}
ll inverse(ll x,ll n)
{
    return power(x,n)%mod;
}
ll nCr(ll n,ll r)
{
    ll x=((fact[r]%mod)*(fact[n-r]%mod))%mod;
    x=inverse(x,mod-2);
    return ((fact[n]%mod)*(x%mod))%mod;

}
void catalanDP()
{
    catalan[0]=catalan[1]=1;
    for(ll i=2;i<=N;i++)
    {
        catalan[i]=0;
        for(ll j=0;j<i;j++)
            catalan[i]+=(catalan[j]*catalan[i-j-1]);
    }
}
void computeLPS(string pat,ll M,ll *lps)
{
    ll len=0;
    lps[0]=0;
    ll i=1;
    while(i<M)
    {
        if(pat[i]==pat[len])
        {
            len++;
            lps[i]=len;
            i++;
        }
        else
        {
            if(len!=0)
                len=lps[len-1];
            else
            {
                lps[i]=0;
                i++;
            }
        }
    }
}
void KMP(string pat,string txt)
{
    ll M=pat.length();
    ll n=txt.length();
    ll lps[M];
    computeLPS(pat,M,lps);
    ll i=0,j=0;
    while(i<n)
    {
        if(pat[j]==txt[i])
        {
            i++;j++;
        }
        if(j==M)
        {
            cout<<"pattern found at "<<i-j<<endl;
            j=lps[j-1];
        }
        else if(i<n && pat[j]!=txt[i])
        {
            if(j!=0)
                j=lps[j-1];
            else
                i++;
        }
    }
}
ll inv(ll a,ll m)
{
    ll m0=m,t,q,x0=0,x1=1;
    if(m==1)
        return 0;
    while(a>1)
    {
        q=a/m;
        t=m;
        m=a%m,a=t;
        t=x0;
        x0=x1-q*x0;
        x1=t;
    }
    if(x1<0)
        x1+=m0;
    return x1;
}
ll CRT(ll num[],ll rem[],ll k)
{
    ll prod=1;
    for(ll i=0;i<k;i++)
        prod*=num[i];
    ll result=0;
    for(ll i=0;i<k;i++)
    {
        ll p=prod/num[i];
        result+=rem[i]*inv(p,num[i])*p;
    }
    return result%prod;
}*/
ll already(ll a[],ll n,ll k)
{
    ll sum=0;
    for(ll i=1;i<=k;i++)
        sum+=a[i];
    ll prev=sum,j=1;
    for(ll i=k+1;k<=n;k++)
    {
        sum+=a[k]-a[j];
        if(sum!=prev)
            return 0;
        j++;
    }
    return 1;
}
ll sorted(ll a[],ll n)
{
    ll ans[n+5];
    for(ll i=1;i<=n;i++)
        ans[i]=a[i];
    sort(ans+1,ans+n+1);
    for(ll i=1;i<=n;i++)
    {
        if(a[i]!=ans[i])
            return 0;
    }
    return 1;
}
int main()
{
    ll t,n,k;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        ll a[n+5];
        for(ll i=1;i<=n;i++)
            cin>>a[i];
        if(already(a,n,k))
        {
            cout<<n<<'\n';
            for(ll i=1;i<=n;i++)
                cout<<a[i]<<" ";
            cout<<'\n';
        }
        if(k<=*max_element(a+1,a+n+1)-*min_element(a+1,a+n+1) || sorted(a,n))
        {
            cout<<"-1"<<endl;
            continue;
        }
        else
        {
            vector<ll>v;
            ll mx=*max_element(a+1,a+n+1);
             ll i=1,res=mx,count1=0;
            while(i<=n)
            {
                if(res==a[i])
                    i++;
                v.push_back(res);
                res--;
                count1++;
                if(count1==k)
                {
                    res=mx;
                    count1=0;
                }
                if(res==0)
                    res=mx;
            }
            cout<<v.size()<<'\n';
            for(ll i=0;i<v.size();i++)
                cout<<v[i]<<" ";
            cout<<'\n';
            v.clear();
        }
    }
}


/*
if not done today , will do it tommorrow !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
#include<bits/stdc++.h>
using namespace std;
#include<string.h>
#define ll long long
#define max_pq priority_queue<ll>
#define min_pq priority_queue<ll,vector<ll>,greater<ll> >
#define F(n) for(ll i=0;i<n;i++)
#define F2(n,m) for(ll i=n;i<m;i++)
#define pp pair<ll,ll>
#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);
#define f first
#define s second
#define pb push_back
#define mod 1000000007      // 10e9 +7
#define N 100005    // 10e5
ll prime[N],dist[N],fact[N+5],catalan[N];
bool vis[N];
vector<pair<ll,ll> > vec[N];
vector<ll> adj[N];
/*
void dijkstra(ll src)
{
    memset(vis,false,sizeof(vis));
    dist[src]=0;
    priority_queue<pp,vector<pp>,greater<pp> > pq;
    pq.push({0,src});
    while(!pq.empty())
    {
        pp p=pq.top();
        pq.pop();
        ll x=p.s;
        ll wei=p.f;
        if(vis[x]) continue;
        vis[x]=true;
        for(ll i=0;i<vec[x].size();i++)
        {
            ll e=vec[x][i].f;
            ll w=vec[x][i].s;
            if(dist[x]+w <dist[e]){
                dist[e]=dist[x]+w;
                pq.push({dist[e],e});
            }
        }
    }
}
ll prim(ll src)
{
    priority_queue<pp,vector<pp>,greater<pp> > Q;
    ll y,mincost=0;
    pp p;
    Q.push({0,src});
    while(!Q.empty())
    {
        p=Q.top();
        Q.pop();
        src=p.s;
        if(vis[src]==true)
            continue;
        vis[src]=true;
        mincost+=p.f;
        for(ll i=0;i<vec[src].size();i++)
        {
            y=vec[src][i].s;
            if(vis[y]==false)
            Q.push({vec[src][i].f,y});
        }
    }
    return mincost;
}

string I_to_S(ll n)
{
    string s=to_string(n);
    return s;
}
ll S_to_I(string s)
{
    return atoi(s.c_str());
}
ll svalue(string s)
{
    ll res=0;
    for(ll i=0;i<s.length();i++)
        res+=(s[i]-0);
    return res;
}
string to_upper(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=toupper(c);
    });
    return s;
}
string to_lower(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=tolower(c);
    });
    return s;
}
string D_to_B(ll n)
{
    return bitset<32>(n).to_string();
}*/
/*
ll lcm(ll a,ll b)
{
    ll x=(a*b)/__gcd(a,b);
    return x;
}
ll gcd(ll a,ll b)
{
    return __gcd(a,b);
}
void sieve()
{
    for(ll i=0;i<N;i++)
        prime[i]=0;
    prime[0]=1;
    prime[1]=1;
    for(ll i=2;i*i<=N;i++)
    {
        if(!prime[i])
        {
            for(ll j=2*i;j<=N;j+=i)
                prime[j]=1;
        }
    }
}
ll toitient(ll n)
{
    ll result=n;
    for(ll p=2;p*p<=n;++p)
    {
        if(n%p==0)
        {
            while(n%p==0)
                n=n/p;
            result-=(result/p);
        }
    }
    if(n>1)
        result-=(result/n);
    return result;
}
ll factorcount(ll n)
{
    ll total=1;
    for(ll p=2;p<=n;p++)
    {
        if(!prime[p])
        {
            ll count1=0;
            if(n%p==0)
            {
                while(n%p==0)
                {
                    n=n/p;
                    count1++;
                }
                total=total*(count1+1);
            }
        }
    }
    return total;
}
ll longestincr(ll a[],ll n)
{
    ll ans[n+1];
    ans[0]=1;
    for(ll i=1;i<n;i++)
    {
        ans[i]=1;
        for(ll j=i-1;j>=0;j--)
        {
            if(a[j]<a[i])
                ans[i]=max(ans[i],1+ans[j]);
        }
    }
    return *max_element(ans,ans+n);
}
ll power(ll x,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1)
            res=((res%mod)*(x%mod))%mod;
        x=((x%mod)*(x%mod))%mod;
        n=n>>1;
    }
    return res;
}
void factorial()
{
    fact[0]=1;
    for(ll i=1;i<=N;i++)
        fact[i]=(fact[i-1]%mod *i)%mod;
}
ll inverse(ll x,ll n)
{
    return power(x,n)%mod;
}
ll nCr(ll n,ll r)
{
    ll x=((fact[r]%mod)*(fact[n-r]%mod))%mod;
    x=inverse(x,mod-2);
    return ((fact[n]%mod)*(x%mod))%mod;

}
void catalanDP()
{
    catalan[0]=catalan[1]=1;
    for(ll i=2;i<=N;i++)
    {
        catalan[i]=0;
        for(ll j=0;j<i;j++)
            catalan[i]+=(catalan[j]*catalan[i-j-1]);
    }
}
void computeLPS(string pat,ll M,ll *lps)
{
    ll len=0;
    lps[0]=0;
    ll i=1;
    while(i<M)
    {
        if(pat[i]==pat[len])
        {
            len++;
            lps[i]=len;
            i++;
        }
        else
        {
            if(len!=0)
                len=lps[len-1];
            else
            {
                lps[i]=0;
                i++;
            }
        }
    }
}
void KMP(string pat,string txt)
{
    ll M=pat.length();
    ll n=txt.length();
    ll lps[M];
    computeLPS(pat,M,lps);
    ll i=0,j=0;
    while(i<n)
    {
        if(pat[j]==txt[i])
        {
            i++;j++;
        }
        if(j==M)
        {
            cout<<"pattern found at "<<i-j<<endl;
            j=lps[j-1];
        }
        else if(i<n && pat[j]!=txt[i])
        {
            if(j!=0)
                j=lps[j-1];
            else
                i++;
        }
    }
}
ll inv(ll a,ll m)
{
    ll m0=m,t,q,x0=0,x1=1;
    if(m==1)
        return 0;
    while(a>1)
    {
        q=a/m;
        t=m;
        m=a%m,a=t;
        t=x0;
        x0=x1-q*x0;
        x1=t;
    }
    if(x1<0)
        x1+=m0;
    return x1;
}
ll CRT(ll num[],ll rem[],ll k)
{
    ll prod=1;
    for(ll i=0;i<k;i++)
        prod*=num[i];
    ll result=0;
    for(ll i=0;i<k;i++)
    {
        ll p=prod/num[i];
        result+=rem[i]*inv(p,num[i])*p;
    }
    return result%prod;
}*/
ll already(ll a[],ll n,ll k)
{
    ll sum=0;
    for(ll i=1;i<=k;i++)
        sum+=a[i];
    ll prev=sum,j=1;
    for(ll i=k+1;k<=n;k++)
    {
        sum+=a[k]-a[j];
        if(sum!=prev)
            return 0;
        j++;
    }
    return 1;
}
int main()
{
    ll t,n,k;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        ll a[n+5];
        for(ll i=1;i<=n;i++)
            cin>>a[i];
        if(already(a,n,k))
        {
            cout<<n<<'\n';
            for(ll i=1;i<=n;i++)
                cout<<a[i]<<" ";
            cout<<'\n';
        }
        if(k<*max_element(a+1,a+n+1))
        {
            cout<<"-1"<<endl;
            continue;
        }
        else
        {
            ll i=1,res=k;
            vector<ll>v;
            while(i<=n)
            {
                if(res==a[i])
                    i++;
                v.push_back(res);
                res--;
                if(res==0)
                    res=k;
            }
            cout<<v.size()<<'\n';
            for(ll i=0;i<v.size();i++)
                cout<<v[i]<<" ";
            cout<<'\n';
        }
    }
}


/*
if not done today , will do it tommorrow !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
#include<bits/stdc++.h>
using namespace std;
#include<string.h>
#define ll long long
#define max_pq priority_queue<ll>
#define min_pq priority_queue<ll,vector<ll>,greater<ll> >
#define F(n) for(ll i=0;i<n;i++)
#define F2(n,m) for(ll i=n;i<m;i++)
#define pp pair<ll,ll>
#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);
#define f first
#define s second
#define pb push_back
#define mod 1000000007      // 10e9 +7
#define N 100005    // 10e5
ll prime[N],dist[N],fact[N+5],catalan[N];
bool vis[N];
vector<pair<ll,ll> > vec[N];
vector<ll> adj[N];
/*
void dijkstra(ll src)
{
    memset(vis,false,sizeof(vis));
    dist[src]=0;
    priority_queue<pp,vector<pp>,greater<pp> > pq;
    pq.push({0,src});
    while(!pq.empty())
    {
        pp p=pq.top();
        pq.pop();
        ll x=p.s;
        ll wei=p.f;
        if(vis[x]) continue;
        vis[x]=true;
        for(ll i=0;i<vec[x].size();i++)
        {
            ll e=vec[x][i].f;
            ll w=vec[x][i].s;
            if(dist[x]+w <dist[e]){
                dist[e]=dist[x]+w;
                pq.push({dist[e],e});
            }
        }
    }
}
ll prim(ll src)
{
    priority_queue<pp,vector<pp>,greater<pp> > Q;
    ll y,mincost=0;
    pp p;
    Q.push({0,src});
    while(!Q.empty())
    {
        p=Q.top();
        Q.pop();
        src=p.s;
        if(vis[src]==true)
            continue;
        vis[src]=true;
        mincost+=p.f;
        for(ll i=0;i<vec[src].size();i++)
        {
            y=vec[src][i].s;
            if(vis[y]==false)
            Q.push({vec[src][i].f,y});
        }
    }
    return mincost;
}

string I_to_S(ll n)
{
    string s=to_string(n);
    return s;
}
ll S_to_I(string s)
{
    return atoi(s.c_str());
}
ll svalue(string s)
{
    ll res=0;
    for(ll i=0;i<s.length();i++)
        res+=(s[i]-0);
    return res;
}
string to_upper(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=toupper(c);
    });
    return s;
}
string to_lower(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=tolower(c);
    });
    return s;
}
string D_to_B(ll n)
{
    return bitset<32>(n).to_string();
}*/
/*
ll lcm(ll a,ll b)
{
    ll x=(a*b)/__gcd(a,b);
    return x;
}
ll gcd(ll a,ll b)
{
    return __gcd(a,b);
}
void sieve()
{
    for(ll i=0;i<N;i++)
        prime[i]=0;
    prime[0]=1;
    prime[1]=1;
    for(ll i=2;i*i<=N;i++)
    {
        if(!prime[i])
        {
            for(ll j=2*i;j<=N;j+=i)
                prime[j]=1;
        }
    }
}
ll toitient(ll n)
{
    ll result=n;
    for(ll p=2;p*p<=n;++p)
    {
        if(n%p==0)
        {
            while(n%p==0)
                n=n/p;
            result-=(result/p);
        }
    }
    if(n>1)
        result-=(result/n);
    return result;
}
ll factorcount(ll n)
{
    ll total=1;
    for(ll p=2;p<=n;p++)
    {
        if(!prime[p])
        {
            ll count1=0;
            if(n%p==0)
            {
                while(n%p==0)
                {
                    n=n/p;
                    count1++;
                }
                total=total*(count1+1);
            }
        }
    }
    return total;
}
ll longestincr(ll a[],ll n)
{
    ll ans[n+1];
    ans[0]=1;
    for(ll i=1;i<n;i++)
    {
        ans[i]=1;
        for(ll j=i-1;j>=0;j--)
        {
            if(a[j]<a[i])
                ans[i]=max(ans[i],1+ans[j]);
        }
    }
    return *max_element(ans,ans+n);
}
ll power(ll x,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1)
            res=((res%mod)*(x%mod))%mod;
        x=((x%mod)*(x%mod))%mod;
        n=n>>1;
    }
    return res;
}
void factorial()
{
    fact[0]=1;
    for(ll i=1;i<=N;i++)
        fact[i]=(fact[i-1]%mod *i)%mod;
}
ll inverse(ll x,ll n)
{
    return power(x,n)%mod;
}
ll nCr(ll n,ll r)
{
    ll x=((fact[r]%mod)*(fact[n-r]%mod))%mod;
    x=inverse(x,mod-2);
    return ((fact[n]%mod)*(x%mod))%mod;

}
void catalanDP()
{
    catalan[0]=catalan[1]=1;
    for(ll i=2;i<=N;i++)
    {
        catalan[i]=0;
        for(ll j=0;j<i;j++)
            catalan[i]+=(catalan[j]*catalan[i-j-1]);
    }
}
void computeLPS(string pat,ll M,ll *lps)
{
    ll len=0;
    lps[0]=0;
    ll i=1;
    while(i<M)
    {
        if(pat[i]==pat[len])
        {
            len++;
            lps[i]=len;
            i++;
        }
        else
        {
            if(len!=0)
                len=lps[len-1];
            else
            {
                lps[i]=0;
                i++;
            }
        }
    }
}
void KMP(string pat,string txt)
{
    ll M=pat.length();
    ll n=txt.length();
    ll lps[M];
    computeLPS(pat,M,lps);
    ll i=0,j=0;
    while(i<n)
    {
        if(pat[j]==txt[i])
        {
            i++;j++;
        }
        if(j==M)
        {
            cout<<"pattern found at "<<i-j<<endl;
            j=lps[j-1];
        }
        else if(i<n && pat[j]!=txt[i])
        {
            if(j!=0)
                j=lps[j-1];
            else
                i++;
        }
    }
}
ll inv(ll a,ll m)
{
    ll m0=m,t,q,x0=0,x1=1;
    if(m==1)
        return 0;
    while(a>1)
    {
        q=a/m;
        t=m;
        m=a%m,a=t;
        t=x0;
        x0=x1-q*x0;
        x1=t;
    }
    if(x1<0)
        x1+=m0;
    return x1;
}
ll CRT(ll num[],ll rem[],ll k)
{
    ll prod=1;
    for(ll i=0;i<k;i++)
        prod*=num[i];
    ll result=0;
    for(ll i=0;i<k;i++)
    {
        ll p=prod/num[i];
        result+=rem[i]*inv(p,num[i])*p;
    }
    return result%prod;
}*/
ll already(ll a[],ll n,ll k)
{
    ll sum=0;
    for(ll i=1;i<=k;i++)
        sum+=a[i];
    ll prev=sum,j=1;
    for(ll i=k+1;k<=n;k++)
    {
        sum+=a[k]-a[j];
        if(sum!=prev)
            return 0;
        j++;
    }
    return 1;
}
ll sorted(ll a[],ll n)
{
    ll ans[n+5];
    for(ll i=1;i<=n;i++)
        ans[i]=a[i];
    sort(ans+1,ans+n+1);
    for(ll i=1;i<=n;i++)
    {
        if(a[i]!=ans[i])
            return 0;
    }
    return 1;
}
int main()
{
    ll t,n,k;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        ll a[n+5];
        for(ll i=1;i<=n;i++)
            cin>>a[i];
        if(already(a,n,k))
        {
            cout<<n<<'\n';
            for(ll i=1;i<=n;i++)
                cout<<a[i]<<" ";
            cout<<'\n';
        }
        if(k<=*max_element(a+1,a+n+1)-*min_element(a+1,a+n+1) )
        {
            cout<<"-1"<<endl;
            continue;
        }
        else
        {
            vector<ll>v;
            ll mx=*max_element(a+1,a+n+1);
             ll i=1,res=mx,count1=0;
            while(i<=n)
            {
                if(res==a[i])
                    i++;
                v.push_back(res);
                res--;
                count1++;
                if(count1==k)
                {
                    res=mx;
                    count1=0;
                }
                if(res==0)
                    res=mx;
            }
            cout<<v.size()<<'\n';
            for(ll i=0;i<v.size();i++)
                cout<<v[i]<<" ";
            cout<<'\n';
            v.clear();
        }
    }
}


/*
if not done today , will do it tommorrow !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
#include<bits/stdc++.h>
using namespace std;
#include<string.h>
#define ll long long
#define max_pq priority_queue<ll>
#define min_pq priority_queue<ll,vector<ll>,greater<ll> >
#define F(n) for(ll i=0;i<n;i++)
#define F2(n,m) for(ll i=n;i<m;i++)
#define pp pair<ll,ll>
#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);
#define f first
#define s second
#define pb push_back
#define mod 1000000007      // 10e9 +7
#define N 100005    // 10e5
ll prime[N],dist[N],fact[N+5],catalan[N];
bool vis[N];
vector<pair<ll,ll> > vec[N];
vector<ll> adj[N];
/*
void dijkstra(ll src)
{
    memset(vis,false,sizeof(vis));
    dist[src]=0;
    priority_queue<pp,vector<pp>,greater<pp> > pq;
    pq.push({0,src});
    while(!pq.empty())
    {
        pp p=pq.top();
        pq.pop();
        ll x=p.s;
        ll wei=p.f;
        if(vis[x]) continue;
        vis[x]=true;
        for(ll i=0;i<vec[x].size();i++)
        {
            ll e=vec[x][i].f;
            ll w=vec[x][i].s;
            if(dist[x]+w <dist[e]){
                dist[e]=dist[x]+w;
                pq.push({dist[e],e});
            }
        }
    }
}
ll prim(ll src)
{
    priority_queue<pp,vector<pp>,greater<pp> > Q;
    ll y,mincost=0;
    pp p;
    Q.push({0,src});
    while(!Q.empty())
    {
        p=Q.top();
        Q.pop();
        src=p.s;
        if(vis[src]==true)
            continue;
        vis[src]=true;
        mincost+=p.f;
        for(ll i=0;i<vec[src].size();i++)
        {
            y=vec[src][i].s;
            if(vis[y]==false)
            Q.push({vec[src][i].f,y});
        }
    }
    return mincost;
}

string I_to_S(ll n)
{
    string s=to_string(n);
    return s;
}
ll S_to_I(string s)
{
    return atoi(s.c_str());
}
ll svalue(string s)
{
    ll res=0;
    for(ll i=0;i<s.length();i++)
        res+=(s[i]-0);
    return res;
}
string to_upper(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=toupper(c);
    });
    return s;
}
string to_lower(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=tolower(c);
    });
    return s;
}
string D_to_B(ll n)
{
    return bitset<32>(n).to_string();
}*/
/*
ll lcm(ll a,ll b)
{
    ll x=(a*b)/__gcd(a,b);
    return x;
}
ll gcd(ll a,ll b)
{
    return __gcd(a,b);
}
void sieve()
{
    for(ll i=0;i<N;i++)
        prime[i]=0;
    prime[0]=1;
    prime[1]=1;
    for(ll i=2;i*i<=N;i++)
    {
        if(!prime[i])
        {
            for(ll j=2*i;j<=N;j+=i)
                prime[j]=1;
        }
    }
}
ll toitient(ll n)
{
    ll result=n;
    for(ll p=2;p*p<=n;++p)
    {
        if(n%p==0)
        {
            while(n%p==0)
                n=n/p;
            result-=(result/p);
        }
    }
    if(n>1)
        result-=(result/n);
    return result;
}
ll factorcount(ll n)
{
    ll total=1;
    for(ll p=2;p<=n;p++)
    {
        if(!prime[p])
        {
            ll count1=0;
            if(n%p==0)
            {
                while(n%p==0)
                {
                    n=n/p;
                    count1++;
                }
                total=total*(count1+1);
            }
        }
    }
    return total;
}
ll longestincr(ll a[],ll n)
{
    ll ans[n+1];
    ans[0]=1;
    for(ll i=1;i<n;i++)
    {
        ans[i]=1;
        for(ll j=i-1;j>=0;j--)
        {
            if(a[j]<a[i])
                ans[i]=max(ans[i],1+ans[j]);
        }
    }
    return *max_element(ans,ans+n);
}
ll power(ll x,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1)
            res=((res%mod)*(x%mod))%mod;
        x=((x%mod)*(x%mod))%mod;
        n=n>>1;
    }
    return res;
}
void factorial()
{
    fact[0]=1;
    for(ll i=1;i<=N;i++)
        fact[i]=(fact[i-1]%mod *i)%mod;
}
ll inverse(ll x,ll n)
{
    return power(x,n)%mod;
}
ll nCr(ll n,ll r)
{
    ll x=((fact[r]%mod)*(fact[n-r]%mod))%mod;
    x=inverse(x,mod-2);
    return ((fact[n]%mod)*(x%mod))%mod;

}
void catalanDP()
{
    catalan[0]=catalan[1]=1;
    for(ll i=2;i<=N;i++)
    {
        catalan[i]=0;
        for(ll j=0;j<i;j++)
            catalan[i]+=(catalan[j]*catalan[i-j-1]);
    }
}
void computeLPS(string pat,ll M,ll *lps)
{
    ll len=0;
    lps[0]=0;
    ll i=1;
    while(i<M)
    {
        if(pat[i]==pat[len])
        {
            len++;
            lps[i]=len;
            i++;
        }
        else
        {
            if(len!=0)
                len=lps[len-1];
            else
            {
                lps[i]=0;
                i++;
            }
        }
    }
}
void KMP(string pat,string txt)
{
    ll M=pat.length();
    ll n=txt.length();
    ll lps[M];
    computeLPS(pat,M,lps);
    ll i=0,j=0;
    while(i<n)
    {
        if(pat[j]==txt[i])
        {
            i++;j++;
        }
        if(j==M)
        {
            cout<<"pattern found at "<<i-j<<endl;
            j=lps[j-1];
        }
        else if(i<n && pat[j]!=txt[i])
        {
            if(j!=0)
                j=lps[j-1];
            else
                i++;
        }
    }
}
ll inv(ll a,ll m)
{
    ll m0=m,t,q,x0=0,x1=1;
    if(m==1)
        return 0;
    while(a>1)
    {
        q=a/m;
        t=m;
        m=a%m,a=t;
        t=x0;
        x0=x1-q*x0;
        x1=t;
    }
    if(x1<0)
        x1+=m0;
    return x1;
}
ll CRT(ll num[],ll rem[],ll k)
{
    ll prod=1;
    for(ll i=0;i<k;i++)
        prod*=num[i];
    ll result=0;
    for(ll i=0;i<k;i++)
    {
        ll p=prod/num[i];
        result+=rem[i]*inv(p,num[i])*p;
    }
    return result%prod;
}*/
ll already(ll a[],ll n,ll k)
{
    ll sum=0;
    for(ll i=1;i<=k;i++)
        sum+=a[i];
    ll prev=sum,j=1;
    for(ll i=k+1;k<=n;k++)
    {
        sum+=a[k]-a[j];
        if(sum!=prev)
            return 0;
        j++;
    }
    return 1;
}
ll sorted(ll a[],ll n)
{
    ll ans[n+5];
    for(ll i=1;i<=n;i++)
        ans[i]=a[i];
    sort(ans+1,ans+n+1);
    for(ll i=1;i<=n;i++)
    {
        if(a[i]!=ans[i])
            return 0;
    }
    return 1;
}
int main()
{
    ll t,n,k;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        ll a[n+5];
        for(ll i=1;i<=n;i++)
            cin>>a[i];
        if(already(a,n,k))
        {
            cout<<n<<'\n';
            for(ll i=1;i<=n;i++)
                cout<<a[i]<<" ";
            cout<<'\n';
        }
        if(k<*max_element(a+1,a+n+1)-*min_element(a+1,a+n+1) || sorted(a,n))
        {
            cout<<"-1"<<endl;
            continue;
        }
        else
        {
            vector<ll>v;
            ll mx=*max_element(a+1,a+n+1);
             ll i=1,res=mx,count1=0;
            while(i<=n)
            {
                if(res==a[i])
                    i++;
                v.push_back(res);
                res--;
                count1++;
                if(count1==k)
                {
                    res=mx;
                    count1=0;
                }
                if(res==0)
                    res=mx;
            }
            cout<<v.size()<<'\n';
            for(ll i=0;i<v.size();i++)
                cout<<v[i]<<" ";
            cout<<'\n';
            v.clear();
        }
    }
}


/*
if not done today , will do it tommorrow !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
#include<bits/stdc++.h>
using namespace std;
#include<string.h>
#define ll long long
#define max_pq priority_queue<ll>
#define min_pq priority_queue<ll,vector<ll>,greater<ll> >
#define F(n) for(ll i=0;i<n;i++)
#define F2(n,m) for(ll i=n;i<m;i++)
#define pp pair<ll,ll>
#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);
#define f first
#define s second
#define pb push_back
#define mod 1000000007      // 10e9 +7
#define N 100005    // 10e5
ll prime[N],dist[N],fact[N+5],catalan[N];
bool vis[N];
vector<pair<ll,ll> > vec[N];
vector<ll> adj[N];
/*
void dijkstra(ll src)
{
    memset(vis,false,sizeof(vis));
    dist[src]=0;
    priority_queue<pp,vector<pp>,greater<pp> > pq;
    pq.push({0,src});
    while(!pq.empty())
    {
        pp p=pq.top();
        pq.pop();
        ll x=p.s;
        ll wei=p.f;
        if(vis[x]) continue;
        vis[x]=true;
        for(ll i=0;i<vec[x].size();i++)
        {
            ll e=vec[x][i].f;
            ll w=vec[x][i].s;
            if(dist[x]+w <dist[e]){
                dist[e]=dist[x]+w;
                pq.push({dist[e],e});
            }
        }
    }
}
ll prim(ll src)
{
    priority_queue<pp,vector<pp>,greater<pp> > Q;
    ll y,mincost=0;
    pp p;
    Q.push({0,src});
    while(!Q.empty())
    {
        p=Q.top();
        Q.pop();
        src=p.s;
        if(vis[src]==true)
            continue;
        vis[src]=true;
        mincost+=p.f;
        for(ll i=0;i<vec[src].size();i++)
        {
            y=vec[src][i].s;
            if(vis[y]==false)
            Q.push({vec[src][i].f,y});
        }
    }
    return mincost;
}

string I_to_S(ll n)
{
    string s=to_string(n);
    return s;
}
ll S_to_I(string s)
{
    return atoi(s.c_str());
}
ll svalue(string s)
{
    ll res=0;
    for(ll i=0;i<s.length();i++)
        res+=(s[i]-0);
    return res;
}
string to_upper(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=toupper(c);
    });
    return s;
}
string to_lower(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=tolower(c);
    });
    return s;
}
string D_to_B(ll n)
{
    return bitset<32>(n).to_string();
}*/
/*
ll lcm(ll a,ll b)
{
    ll x=(a*b)/__gcd(a,b);
    return x;
}
ll gcd(ll a,ll b)
{
    return __gcd(a,b);
}
void sieve()
{
    for(ll i=0;i<N;i++)
        prime[i]=0;
    prime[0]=1;
    prime[1]=1;
    for(ll i=2;i*i<=N;i++)
    {
        if(!prime[i])
        {
            for(ll j=2*i;j<=N;j+=i)
                prime[j]=1;
        }
    }
}
ll toitient(ll n)
{
    ll result=n;
    for(ll p=2;p*p<=n;++p)
    {
        if(n%p==0)
        {
            while(n%p==0)
                n=n/p;
            result-=(result/p);
        }
    }
    if(n>1)
        result-=(result/n);
    return result;
}
ll factorcount(ll n)
{
    ll total=1;
    for(ll p=2;p<=n;p++)
    {
        if(!prime[p])
        {
            ll count1=0;
            if(n%p==0)
            {
                while(n%p==0)
                {
                    n=n/p;
                    count1++;
                }
                total=total*(count1+1);
            }
        }
    }
    return total;
}
ll longestincr(ll a[],ll n)
{
    ll ans[n+1];
    ans[0]=1;
    for(ll i=1;i<n;i++)
    {
        ans[i]=1;
        for(ll j=i-1;j>=0;j--)
        {
            if(a[j]<a[i])
                ans[i]=max(ans[i],1+ans[j]);
        }
    }
    return *max_element(ans,ans+n);
}
ll power(ll x,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1)
            res=((res%mod)*(x%mod))%mod;
        x=((x%mod)*(x%mod))%mod;
        n=n>>1;
    }
    return res;
}
void factorial()
{
    fact[0]=1;
    for(ll i=1;i<=N;i++)
        fact[i]=(fact[i-1]%mod *i)%mod;
}
ll inverse(ll x,ll n)
{
    return power(x,n)%mod;
}
ll nCr(ll n,ll r)
{
    ll x=((fact[r]%mod)*(fact[n-r]%mod))%mod;
    x=inverse(x,mod-2);
    return ((fact[n]%mod)*(x%mod))%mod;

}
void catalanDP()
{
    catalan[0]=catalan[1]=1;
    for(ll i=2;i<=N;i++)
    {
        catalan[i]=0;
        for(ll j=0;j<i;j++)
            catalan[i]+=(catalan[j]*catalan[i-j-1]);
    }
}
void computeLPS(string pat,ll M,ll *lps)
{
    ll len=0;
    lps[0]=0;
    ll i=1;
    while(i<M)
    {
        if(pat[i]==pat[len])
        {
            len++;
            lps[i]=len;
            i++;
        }
        else
        {
            if(len!=0)
                len=lps[len-1];
            else
            {
                lps[i]=0;
                i++;
            }
        }
    }
}
void KMP(string pat,string txt)
{
    ll M=pat.length();
    ll n=txt.length();
    ll lps[M];
    computeLPS(pat,M,lps);
    ll i=0,j=0;
    while(i<n)
    {
        if(pat[j]==txt[i])
        {
            i++;j++;
        }
        if(j==M)
        {
            cout<<"pattern found at "<<i-j<<endl;
            j=lps[j-1];
        }
        else if(i<n && pat[j]!=txt[i])
        {
            if(j!=0)
                j=lps[j-1];
            else
                i++;
        }
    }
}
ll inv(ll a,ll m)
{
    ll m0=m,t,q,x0=0,x1=1;
    if(m==1)
        return 0;
    while(a>1)
    {
        q=a/m;
        t=m;
        m=a%m,a=t;
        t=x0;
        x0=x1-q*x0;
        x1=t;
    }
    if(x1<0)
        x1+=m0;
    return x1;
}
ll CRT(ll num[],ll rem[],ll k)
{
    ll prod=1;
    for(ll i=0;i<k;i++)
        prod*=num[i];
    ll result=0;
    for(ll i=0;i<k;i++)
    {
        ll p=prod/num[i];
        result+=rem[i]*inv(p,num[i])*p;
    }
    return result%prod;
}*/
int main()
{
    ll t,n,k;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        ll a[n+5];
        for(ll i=1;i<=n;i++)
            cin>>a[i];
        if(k<*max_element(a+1,a+n+1))
        {
            cout<<"-1"<<endl;
            continue;
        }
        else
        {
            ll i=1,res=k;
            vector<ll>v;
            while(i<=n)
            {
                if(res==a[i])
                    i++;
                v.push_back(res);
                res--;
                if(res==0)
                    res=k;
            }
            cout<<v.size()<<'\n';
            for(ll i=0;i<v.size();i++)
                cout<<v[i]<<" ";
            cout<<'\n';
        }
    }
}


/*
if not done today , will do it tommorrow !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
#include<bits/stdc++.h>
using namespace std;
#include<string.h>
#define ll long long
#define max_pq priority_queue<ll>
#define min_pq priority_queue<ll,vector<ll>,greater<ll> >
#define F(n) for(ll i=0;i<n;i++)
#define F2(n,m) for(ll i=n;i<m;i++)
#define pp pair<ll,ll>
#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);
#define f first
#define s second
#define pb push_back
#define mod 1000000007      // 10e9 +7
#define N 100005    // 10e5
ll prime[N],dist[N],fact[N+5],catalan[N];
bool vis[N];
vector<pair<ll,ll> > vec[N];
vector<ll> adj[N];
/*
void dijkstra(ll src)
{
    memset(vis,false,sizeof(vis));
    dist[src]=0;
    priority_queue<pp,vector<pp>,greater<pp> > pq;
    pq.push({0,src});
    while(!pq.empty())
    {
        pp p=pq.top();
        pq.pop();
        ll x=p.s;
        ll wei=p.f;
        if(vis[x]) continue;
        vis[x]=true;
        for(ll i=0;i<vec[x].size();i++)
        {
            ll e=vec[x][i].f;
            ll w=vec[x][i].s;
            if(dist[x]+w <dist[e]){
                dist[e]=dist[x]+w;
                pq.push({dist[e],e});
            }
        }
    }
}
ll prim(ll src)
{
    priority_queue<pp,vector<pp>,greater<pp> > Q;
    ll y,mincost=0;
    pp p;
    Q.push({0,src});
    while(!Q.empty())
    {
        p=Q.top();
        Q.pop();
        src=p.s;
        if(vis[src]==true)
            continue;
        vis[src]=true;
        mincost+=p.f;
        for(ll i=0;i<vec[src].size();i++)
        {
            y=vec[src][i].s;
            if(vis[y]==false)
            Q.push({vec[src][i].f,y});
        }
    }
    return mincost;
}

string I_to_S(ll n)
{
    string s=to_string(n);
    return s;
}
ll S_to_I(string s)
{
    return atoi(s.c_str());
}
ll svalue(string s)
{
    ll res=0;
    for(ll i=0;i<s.length();i++)
        res+=(s[i]-0);
    return res;
}
string to_upper(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=toupper(c);
    });
    return s;
}
string to_lower(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=tolower(c);
    });
    return s;
}
string D_to_B(ll n)
{
    return bitset<32>(n).to_string();
}*/
/*
ll lcm(ll a,ll b)
{
    ll x=(a*b)/__gcd(a,b);
    return x;
}
ll gcd(ll a,ll b)
{
    return __gcd(a,b);
}
void sieve()
{
    for(ll i=0;i<N;i++)
        prime[i]=0;
    prime[0]=1;
    prime[1]=1;
    for(ll i=2;i*i<=N;i++)
    {
        if(!prime[i])
        {
            for(ll j=2*i;j<=N;j+=i)
                prime[j]=1;
        }
    }
}
ll toitient(ll n)
{
    ll result=n;
    for(ll p=2;p*p<=n;++p)
    {
        if(n%p==0)
        {
            while(n%p==0)
                n=n/p;
            result-=(result/p);
        }
    }
    if(n>1)
        result-=(result/n);
    return result;
}
ll factorcount(ll n)
{
    ll total=1;
    for(ll p=2;p<=n;p++)
    {
        if(!prime[p])
        {
            ll count1=0;
            if(n%p==0)
            {
                while(n%p==0)
                {
                    n=n/p;
                    count1++;
                }
                total=total*(count1+1);
            }
        }
    }
    return total;
}
ll longestincr(ll a[],ll n)
{
    ll ans[n+1];
    ans[0]=1;
    for(ll i=1;i<n;i++)
    {
        ans[i]=1;
        for(ll j=i-1;j>=0;j--)
        {
            if(a[j]<a[i])
                ans[i]=max(ans[i],1+ans[j]);
        }
    }
    return *max_element(ans,ans+n);
}
ll power(ll x,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1)
            res=((res%mod)*(x%mod))%mod;
        x=((x%mod)*(x%mod))%mod;
        n=n>>1;
    }
    return res;
}
void factorial()
{
    fact[0]=1;
    for(ll i=1;i<=N;i++)
        fact[i]=(fact[i-1]%mod *i)%mod;
}
ll inverse(ll x,ll n)
{
    return power(x,n)%mod;
}
ll nCr(ll n,ll r)
{
    ll x=((fact[r]%mod)*(fact[n-r]%mod))%mod;
    x=inverse(x,mod-2);
    return ((fact[n]%mod)*(x%mod))%mod;

}
void catalanDP()
{
    catalan[0]=catalan[1]=1;
    for(ll i=2;i<=N;i++)
    {
        catalan[i]=0;
        for(ll j=0;j<i;j++)
            catalan[i]+=(catalan[j]*catalan[i-j-1]);
    }
}
void computeLPS(string pat,ll M,ll *lps)
{
    ll len=0;
    lps[0]=0;
    ll i=1;
    while(i<M)
    {
        if(pat[i]==pat[len])
        {
            len++;
            lps[i]=len;
            i++;
        }
        else
        {
            if(len!=0)
                len=lps[len-1];
            else
            {
                lps[i]=0;
                i++;
            }
        }
    }
}
void KMP(string pat,string txt)
{
    ll M=pat.length();
    ll n=txt.length();
    ll lps[M];
    computeLPS(pat,M,lps);
    ll i=0,j=0;
    while(i<n)
    {
        if(pat[j]==txt[i])
        {
            i++;j++;
        }
        if(j==M)
        {
            cout<<"pattern found at "<<i-j<<endl;
            j=lps[j-1];
        }
        else if(i<n && pat[j]!=txt[i])
        {
            if(j!=0)
                j=lps[j-1];
            else
                i++;
        }
    }
}
ll inv(ll a,ll m)
{
    ll m0=m,t,q,x0=0,x1=1;
    if(m==1)
        return 0;
    while(a>1)
    {
        q=a/m;
        t=m;
        m=a%m,a=t;
        t=x0;
        x0=x1-q*x0;
        x1=t;
    }
    if(x1<0)
        x1+=m0;
    return x1;
}
ll CRT(ll num[],ll rem[],ll k)
{
    ll prod=1;
    for(ll i=0;i<k;i++)
        prod*=num[i];
    ll result=0;
    for(ll i=0;i<k;i++)
    {
        ll p=prod/num[i];
        result+=rem[i]*inv(p,num[i])*p;
    }
    return result%prod;
}*/
ll already(ll a[],ll n,ll k)
{
    ll sum=0;
    for(ll i=1;i<=k;i++)
        sum+=a[i];
    ll prev=sum,j=1;
    for(ll i=k+1;k<=n;k++)
    {
        sum+=a[k]-a[j];
        if(sum!=prev)
            return 0;
        j++;
    }
    return 1;
}
ll sorted(ll a[],ll n)
{
    ll ans[n+5];
    for(ll i=1;i<=n;i++)
        ans[i]=a[i];
    sort(ans+1,ans+n+1);
    for(ll i=1;i<=n;i++)
    {
        if(a[i]!=ans[i])
            return 0;
    }
    return 1;
}
int main()
{
    ll t,n,k;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        ll a[n+5];
        for(ll i=1;i<=n;i++)
            cin>>a[i];
        if(already(a,n,k))
        {
            cout<<n<<'\n';
            for(ll i=1;i<=n;i++)
                cout<<a[i]<<" ";
            cout<<'\n';
        }
        if(k<=*max_element(a+1,a+n+1)-*min_element(a+1,a+n+1) || sorted(a,n))
        {
            cout<<"-1"<<endl;
            continue;
        }
        else
        {
            ll i=1,res=k;
            vector<ll>v;
            while(i<=n)
            {
                if(res==a[i])
                    i++;
                v.push_back(res);
                res--;
                if(res==0)
                    res=k;
            }
            cout<<v.size()<<'\n';
            for(ll i=0;i<v.size();i++)
                cout<<v[i]<<" ";
            cout<<'\n';
        }
    }
}


/*
if not done today , will do it tommorrow !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
#include<bits/stdc++.h>
using namespace std;
#include<string.h>
#define ll long long
#define max_pq priority_queue<ll>
#define min_pq priority_queue<ll,vector<ll>,greater<ll> >
#define F(n) for(ll i=0;i<n;i++)
#define F2(n,m) for(ll i=n;i<m;i++)
#define pp pair<ll,ll>
#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);
#define f first
#define s second
#define pb push_back
#define mod 1000000007      // 10e9 +7
#define N 100005    // 10e5
ll prime[N],dist[N],fact[N+5],catalan[N];
bool vis[N];
vector<pair<ll,ll> > vec[N];
vector<ll> adj[N];
/*
void dijkstra(ll src)
{
    memset(vis,false,sizeof(vis));
    dist[src]=0;
    priority_queue<pp,vector<pp>,greater<pp> > pq;
    pq.push({0,src});
    while(!pq.empty())
    {
        pp p=pq.top();
        pq.pop();
        ll x=p.s;
        ll wei=p.f;
        if(vis[x]) continue;
        vis[x]=true;
        for(ll i=0;i<vec[x].size();i++)
        {
            ll e=vec[x][i].f;
            ll w=vec[x][i].s;
            if(dist[x]+w <dist[e]){
                dist[e]=dist[x]+w;
                pq.push({dist[e],e});
            }
        }
    }
}
ll prim(ll src)
{
    priority_queue<pp,vector<pp>,greater<pp> > Q;
    ll y,mincost=0;
    pp p;
    Q.push({0,src});
    while(!Q.empty())
    {
        p=Q.top();
        Q.pop();
        src=p.s;
        if(vis[src]==true)
            continue;
        vis[src]=true;
        mincost+=p.f;
        for(ll i=0;i<vec[src].size();i++)
        {
            y=vec[src][i].s;
            if(vis[y]==false)
            Q.push({vec[src][i].f,y});
        }
    }
    return mincost;
}

string I_to_S(ll n)
{
    string s=to_string(n);
    return s;
}
ll S_to_I(string s)
{
    return atoi(s.c_str());
}
ll svalue(string s)
{
    ll res=0;
    for(ll i=0;i<s.length();i++)
        res+=(s[i]-0);
    return res;
}
string to_upper(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=toupper(c);
    });
    return s;
}
string to_lower(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=tolower(c);
    });
    return s;
}
string D_to_B(ll n)
{
    return bitset<32>(n).to_string();
}*/
/*
ll lcm(ll a,ll b)
{
    ll x=(a*b)/__gcd(a,b);
    return x;
}
ll gcd(ll a,ll b)
{
    return __gcd(a,b);
}
void sieve()
{
    for(ll i=0;i<N;i++)
        prime[i]=0;
    prime[0]=1;
    prime[1]=1;
    for(ll i=2;i*i<=N;i++)
    {
        if(!prime[i])
        {
            for(ll j=2*i;j<=N;j+=i)
                prime[j]=1;
        }
    }
}
ll toitient(ll n)
{
    ll result=n;
    for(ll p=2;p*p<=n;++p)
    {
        if(n%p==0)
        {
            while(n%p==0)
                n=n/p;
            result-=(result/p);
        }
    }
    if(n>1)
        result-=(result/n);
    return result;
}
ll factorcount(ll n)
{
    ll total=1;
    for(ll p=2;p<=n;p++)
    {
        if(!prime[p])
        {
            ll count1=0;
            if(n%p==0)
            {
                while(n%p==0)
                {
                    n=n/p;
                    count1++;
                }
                total=total*(count1+1);
            }
        }
    }
    return total;
}
ll longestincr(ll a[],ll n)
{
    ll ans[n+1];
    ans[0]=1;
    for(ll i=1;i<n;i++)
    {
        ans[i]=1;
        for(ll j=i-1;j>=0;j--)
        {
            if(a[j]<a[i])
                ans[i]=max(ans[i],1+ans[j]);
        }
    }
    return *max_element(ans,ans+n);
}
ll power(ll x,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1)
            res=((res%mod)*(x%mod))%mod;
        x=((x%mod)*(x%mod))%mod;
        n=n>>1;
    }
    return res;
}
void factorial()
{
    fact[0]=1;
    for(ll i=1;i<=N;i++)
        fact[i]=(fact[i-1]%mod *i)%mod;
}
ll inverse(ll x,ll n)
{
    return power(x,n)%mod;
}
ll nCr(ll n,ll r)
{
    ll x=((fact[r]%mod)*(fact[n-r]%mod))%mod;
    x=inverse(x,mod-2);
    return ((fact[n]%mod)*(x%mod))%mod;

}
void catalanDP()
{
    catalan[0]=catalan[1]=1;
    for(ll i=2;i<=N;i++)
    {
        catalan[i]=0;
        for(ll j=0;j<i;j++)
            catalan[i]+=(catalan[j]*catalan[i-j-1]);
    }
}
void computeLPS(string pat,ll M,ll *lps)
{
    ll len=0;
    lps[0]=0;
    ll i=1;
    while(i<M)
    {
        if(pat[i]==pat[len])
        {
            len++;
            lps[i]=len;
            i++;
        }
        else
        {
            if(len!=0)
                len=lps[len-1];
            else
            {
                lps[i]=0;
                i++;
            }
        }
    }
}
void KMP(string pat,string txt)
{
    ll M=pat.length();
    ll n=txt.length();
    ll lps[M];
    computeLPS(pat,M,lps);
    ll i=0,j=0;
    while(i<n)
    {
        if(pat[j]==txt[i])
        {
            i++;j++;
        }
        if(j==M)
        {
            cout<<"pattern found at "<<i-j<<endl;
            j=lps[j-1];
        }
        else if(i<n && pat[j]!=txt[i])
        {
            if(j!=0)
                j=lps[j-1];
            else
                i++;
        }
    }
}
ll inv(ll a,ll m)
{
    ll m0=m,t,q,x0=0,x1=1;
    if(m==1)
        return 0;
    while(a>1)
    {
        q=a/m;
        t=m;
        m=a%m,a=t;
        t=x0;
        x0=x1-q*x0;
        x1=t;
    }
    if(x1<0)
        x1+=m0;
    return x1;
}
ll CRT(ll num[],ll rem[],ll k)
{
    ll prod=1;
    for(ll i=0;i<k;i++)
        prod*=num[i];
    ll result=0;
    for(ll i=0;i<k;i++)
    {
        ll p=prod/num[i];
        result+=rem[i]*inv(p,num[i])*p;
    }
    return result%prod;
}*/
ll already(ll a[],ll n,ll k)
{
    ll sum=0;
    for(ll i=1;i<=k;i++)
        sum+=a[i];
    ll prev=sum,j=1;
    for(ll i=k+1;k<=n;k++)
    {
        sum+=a[k]-a[j];
        if(sum!=prev)
            return 0;
        j++;
    }
    return 1;
}
int main()
{
    ll t,n,k;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        ll a[n+5];
        for(ll i=1;i<=n;i++)
            cin>>a[i];
        if(already(a,n,k))
        {
            cout<<n<<'\n';
            for(ll i=1;i<=n;i++)
                cout<<a[i]<<" ";
            cout<<'\n';
        }
        if(k<=*max_element(a+1,a+n+1)-*min_element(a+1,a+n+1))
        {
            cout<<"-1"<<endl;
            continue;
        }
        else
        {
            ll i=1,res=k;
            vector<ll>v;
            while(i<=n)
            {
                if(res==a[i])
                    i++;
                v.push_back(res);
                res--;
                if(res==0)
                    res=k;
            }
            cout<<v.size()<<'\n';
            for(ll i=0;i<v.size();i++)
                cout<<v[i]<<" ";
            cout<<'\n';
        }
    }
}


/*
if not done today , will do it tommorrow !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
#include<bits/stdc++.h>
using namespace std;
#include<string.h>
#define ll long long
#define max_pq priority_queue<ll>
#define min_pq priority_queue<ll,vector<ll>,greater<ll> >
#define F(n) for(ll i=0;i<n;i++)
#define F2(n,m) for(ll i=n;i<m;i++)
#define pp pair<ll,ll>
#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);
#define f first
#define s second
#define pb push_back
#define mod 1000000007      // 10e9 +7
#define N 100005    // 10e5
ll prime[N],dist[N],fact[N+5],catalan[N];
bool vis[N];
vector<pair<ll,ll> > vec[N];
vector<ll> adj[N];
/*
void dijkstra(ll src)
{
    memset(vis,false,sizeof(vis));
    dist[src]=0;
    priority_queue<pp,vector<pp>,greater<pp> > pq;
    pq.push({0,src});
    while(!pq.empty())
    {
        pp p=pq.top();
        pq.pop();
        ll x=p.s;
        ll wei=p.f;
        if(vis[x]) continue;
        vis[x]=true;
        for(ll i=0;i<vec[x].size();i++)
        {
            ll e=vec[x][i].f;
            ll w=vec[x][i].s;
            if(dist[x]+w <dist[e]){
                dist[e]=dist[x]+w;
                pq.push({dist[e],e});
            }
        }
    }
}
ll prim(ll src)
{
    priority_queue<pp,vector<pp>,greater<pp> > Q;
    ll y,mincost=0;
    pp p;
    Q.push({0,src});
    while(!Q.empty())
    {
        p=Q.top();
        Q.pop();
        src=p.s;
        if(vis[src]==true)
            continue;
        vis[src]=true;
        mincost+=p.f;
        for(ll i=0;i<vec[src].size();i++)
        {
            y=vec[src][i].s;
            if(vis[y]==false)
            Q.push({vec[src][i].f,y});
        }
    }
    return mincost;
}

string I_to_S(ll n)
{
    string s=to_string(n);
    return s;
}
ll S_to_I(string s)
{
    return atoi(s.c_str());
}
ll svalue(string s)
{
    ll res=0;
    for(ll i=0;i<s.length();i++)
        res+=(s[i]-0);
    return res;
}
string to_upper(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=toupper(c);
    });
    return s;
}
string to_lower(string s)
{
    for_each(s.begin(),s.end(),[](char &c){
             c=tolower(c);
    });
    return s;
}
string D_to_B(ll n)
{
    return bitset<32>(n).to_string();
}*/
/*
ll lcm(ll a,ll b)
{
    ll x=(a*b)/__gcd(a,b);
    return x;
}
ll gcd(ll a,ll b)
{
    return __gcd(a,b);
}
void sieve()
{
    for(ll i=0;i<N;i++)
        prime[i]=0;
    prime[0]=1;
    prime[1]=1;
    for(ll i=2;i*i<=N;i++)
    {
        if(!prime[i])
        {
            for(ll j=2*i;j<=N;j+=i)
                prime[j]=1;
        }
    }
}
ll toitient(ll n)
{
    ll result=n;
    for(ll p=2;p*p<=n;++p)
    {
        if(n%p==0)
        {
            while(n%p==0)
                n=n/p;
            result-=(result/p);
        }
    }
    if(n>1)
        result-=(result/n);
    return result;
}
ll factorcount(ll n)
{
    ll total=1;
    for(ll p=2;p<=n;p++)
    {
        if(!prime[p])
        {
            ll count1=0;
            if(n%p==0)
            {
                while(n%p==0)
                {
                    n=n/p;
                    count1++;
                }
                total=total*(count1+1);
            }
        }
    }
    return total;
}
ll longestincr(ll a[],ll n)
{
    ll ans[n+1];
    ans[0]=1;
    for(ll i=1;i<n;i++)
    {
        ans[i]=1;
        for(ll j=i-1;j>=0;j--)
        {
            if(a[j]<a[i])
                ans[i]=max(ans[i],1+ans[j]);
        }
    }
    return *max_element(ans,ans+n);
}
ll power(ll x,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1)
            res=((res%mod)*(x%mod))%mod;
        x=((x%mod)*(x%mod))%mod;
        n=n>>1;
    }
    return res;
}
void factorial()
{
    fact[0]=1;
    for(ll i=1;i<=N;i++)
        fact[i]=(fact[i-1]%mod *i)%mod;
}
ll inverse(ll x,ll n)
{
    return power(x,n)%mod;
}
ll nCr(ll n,ll r)
{
    ll x=((fact[r]%mod)*(fact[n-r]%mod))%mod;
    x=inverse(x,mod-2);
    return ((fact[n]%mod)*(x%mod))%mod;

}
void catalanDP()
{
    catalan[0]=catalan[1]=1;
    for(ll i=2;i<=N;i++)
    {
        catalan[i]=0;
        for(ll j=0;j<i;j++)
            catalan[i]+=(catalan[j]*catalan[i-j-1]);
    }
}
void computeLPS(string pat,ll M,ll *lps)
{
    ll len=0;
    lps[0]=0;
    ll i=1;
    while(i<M)
    {
        if(pat[i]==pat[len])
        {
            len++;
            lps[i]=len;
            i++;
        }
        else
        {
            if(len!=0)
                len=lps[len-1];
            else
            {
                lps[i]=0;
                i++;
            }
        }
    }
}
void KMP(string pat,string txt)
{
    ll M=pat.length();
    ll n=txt.length();
    ll lps[M];
    computeLPS(pat,M,lps);
    ll i=0,j=0;
    while(i<n)
    {
        if(pat[j]==txt[i])
        {
            i++;j++;
        }
        if(j==M)
        {
            cout<<"pattern found at "<<i-j<<endl;
            j=lps[j-1];
        }
        else if(i<n && pat[j]!=txt[i])
        {
            if(j!=0)
                j=lps[j-1];
            else
                i++;
        }
    }
}
ll inv(ll a,ll m)
{
    ll m0=m,t,q,x0=0,x1=1;
    if(m==1)
        return 0;
    while(a>1)
    {
        q=a/m;
        t=m;
        m=a%m,a=t;
        t=x0;
        x0=x1-q*x0;
        x1=t;
    }
    if(x1<0)
        x1+=m0;
    return x1;
}
ll CRT(ll num[],ll rem[],ll k)
{
    ll prod=1;
    for(ll i=0;i<k;i++)
        prod*=num[i];
    ll result=0;
    for(ll i=0;i<k;i++)
    {
        ll p=prod/num[i];
        result+=rem[i]*inv(p,num[i])*p;
    }
    return result%prod;
}*/
ll already(ll a[],ll n,ll k)
{
    ll sum=0;
    for(ll i=1;i<=k;i++)
        sum+=a[i];
    ll prev=sum,j=1;
    for(ll i=k+1;k<=n;k++)
    {
        sum+=a[k]-a[j];
        if(sum!=prev)
            return 0;
        j++;
    }
    return 1;
}
int main()
{
    ll t,n,k;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        ll a[n+5];
        for(ll i=1;i<=n;i++)
            cin>>a[i];
        if(already(a,n,k))
        {
            cout<<n<<'\n';
            for(ll i=1;i<=n;i++)
                cout<<a[i]<<" ";
            cout<<'\n';
        }
        if(k<*max_element(a+1,a+n+1)-*min_element(a+1,a+n+1))
        {
            cout<<"-1"<<endl;
            continue;
        }
        else
        {
            ll i=1,res=k;
            vector<ll>v;
            while(i<=n)
            {
                if(res==a[i])
                    i++;
                v.push_back(res);
                res--;
                if(res==0)
                    res=k;
            }
            cout<<v.size()<<'\n';
            for(ll i=0;i<v.size();i++)
                cout<<v[i]<<" ";
            cout<<'\n';
        }
    }
}


import java.util.*;
public class ania_minimizing {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n=in.nextInt(),c=0;
		int k=in.nextInt();
		String s=in.next();
		if(s.length()==1)
		{
			System.out.print("0");
			System.exit(0);
		}
		char arr[]=s.toCharArray();
		int mid=0;
		while(c<k)
		{
			if(arr[mid]=='1' && mid==0)
			{
				System.out.print("1");
			}
			else if(arr[mid]!='1' && mid==0)
			{
				System.out.print("1");
				c++;
			}
			else
			{
				System.out.print("0");
				c++;
			}
			mid++;
		}
		if(n>k && s.charAt(0)!='1')
		{
			for(int i=k;i<n;i++)
			{
				System.out.print(arr[i]);
			}
		}
	}
}


import java.util.*;
public class ania_minimizing {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n=in.nextInt(),c=0,i=1;
		int k=in.nextInt();
		String s=in.next();
		if(s.length()==1)
		{
			System.out.print("0");
			System.exit(0);
		}
		if(c==k)
		{
			System.out.print(s);
			System.out.exit(0);
		}
		System.out.print("1");
		if(s.charAt(0)!='1')
		{
			c++;
		}
		for(i=1;i<s.length();i++)
		{
			if(c==k)
			{
				break;
			}
			if(s.charAt(i)!='0')
			{
				c++;
			}
			System.out.print("0");
		}
		if(i!=s.length())
		{
			for(int j=i;j<s.length();j++)
			{
				System.out.print(s.charAt(j));
			}
		}
	}
}


import java.util.*;
public class ania_minimizing {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n=in.nextInt(),c=0,i=1;
		int k=in.nextInt();
		String s=in.next();
		if(s.length()==1)
		{
			System.out.print("0");
			System.exit(0);
		}
		System.out.print("1");
		if(s.charAt(0)!='1')
		{
			c++;
		}
		for(i=1;i<s.length();i++)
		{
			if(s.charAt(i)!='0')
			{
				c++;
			}
			System.out.print("0");
			if(c==k)
			{
				break;
			}
		}
		if(i!=s.length())
		{
			for(int j=i+1;j<s.length();j++)
			{
				System.out.print(s.charAt(j));
			}
		}
	}
}


import java.util.*;
public class ania_minimizing {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n=in.nextInt(),c=0,i=1;
		int k=in.nextInt();
		String s=in.next();
		if(s.length()==1)
		{
			System.out.print("0");
			System.exit(0);
		}
		if(c==k)
		{
			System.out.print(s);
			System.exit(0);
		}
		System.out.print("1");
		if(s.charAt(0)!='1')
		{
			c++;
		}
		for(i=1;i<s.length();i++)
		{
			if(c==k)
			{
				break;
			}
			if(s.charAt(i)!='0')
			{
				c++;
			}
			System.out.print("0");
		}
		if(i!=s.length())
		{
			for(int j=i;j<s.length();j++)
			{
				System.out.print(s.charAt(j));
			}
		}
	}
}


import java.util.*;
public class ania_minimizing {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n=in.nextInt(),c=0,i=1;
		int k=in.nextInt();
		String s=in.next();
		if(s.length()==1)
		{
			System.out.print("0");
			System.exit(0);
		}
		System.out.print("1");
		if(s.charAt(0)!='1')
		{
			c++;
		}
		for(i=1;i<s.length();i++)
		{
			if(c==k)
			{
				break;
			}
			if(s.charAt(i)!='0')
			{
				c++;
			}
			System.out.print("0");
		}
		if(i!=s.length())
		{
			for(int j=i;j<s.length();j++)
			{
				System.out.print(s.charAt(j));
			}
		}
	}
}


import java.util.*;
public class ania_minimizing {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		ArrayList<Integer> list = new ArrayList<Integer>();
		int n=in.nextInt();
		int k=in.nextInt();
		String s=in.next();
		if(s.length()==1)
		{
			System.out.print("0");
			System.exit(0);
		}
		for(int i=0;i<n;i++)
		{
			list.add(Character.getNumericValue(s.charAt(i)));
		}
		System.out.print("1");
		list.remove(0);
		int c=0;
		if(s.charAt(0)!='1')
		{
		c=c+1;
		}
		int mid=0;
		while(list.isEmpty()!=true)
		{
			System.out.print("0");
			list.remove(mid);
			c++;
			if(c==k)
			{
				break;
			}
		}
		if(list.isEmpty()!=true)
		{
			for(int i=0;i<list.size();i++)
			{
				System.out.print(list.get(i));
			}
		}
	}
}


import java.util.*;
public class ania_minimizing {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n=in.nextInt(),c=0,i=1;
		int k=in.nextInt();
		String s=in.next();
		if(s.length()==1)
		{
			System.out.print("0");
			System.exit(0);
		}
		if(c==k)
		{
			System.out.print(s);
		}
		System.out.print("1");
		if(s.charAt(0)!='1')
		{
			c++;
		}
		for(i=1;i<s.length();i++)
		{
			if(c==k)
			{
				break;
			}
			if(s.charAt(i)!='0')
			{
				c++;
			}
			System.out.print("0");
		}
		if(i!=s.length())
		{
			for(int j=i;j<s.length();j++)
			{
				System.out.print(s.charAt(j));
			}
		}
	}
}


import java.util.*;
public class ania_minimizing {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n=in.nextInt(),c=0,i=1;
		int k=in.nextInt();
		String s=in.next();
		if(c==k)
		{
			System.out.print(s);
			System.exit(0);
		}
		if(s.length()==1)
		{
			System.out.print("0");
			System.exit(0);
		}
		System.out.print("1");
		if(s.charAt(0)!='1')
		{
			c++;
		}
		for(i=1;i<s.length();i++)
		{
			if(c==k)
			{
				break;
			}
			if(s.charAt(i)!='0')
			{
				c++;
			}
			System.out.print("0");
		}
		if(i!=s.length())
		{
			for(int j=i;j<s.length();j++)
			{
				System.out.print(s.charAt(j));
			}
		}
	}
}


import java.util.*;
public class ania_minimizing {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n=in.nextInt(),c=0,i=1;
		int k=in.nextInt();
		String s=in.next();
		if(s.length()==1)
		{
			System.out.print("0");
			System.exit(0);
		}
		for(i=0;i<s.length();i++)
		{
			if(c==k)
			{
				break;
			}
			if(i==0)
			{
				System.out.print("1");
				if(s.charAt(i)!='1')
				{
					c++;
				}
			}
			if(s.charAt(i)!='0')
			{
				c++;
			}
			System.out.print("0");
		}
		if(i!=s.length())
		{
			for(int j=i;j<s.length();j++)
			{
				System.out.print(s.charAt(j));
			}
		}
	}
}


// package com.company;
import java.util.*;
import java.io.*;
import java.lang.*;

public class Main{
    /*
     ** || ॐ श्री गणेशाय नमः ||
     ** @𝙖𝙪𝙩𝙝𝙤𝙧 𝙅𝙞𝙜𝙖𝙧_𝙉𝙖𝙞𝙣𝙪𝙟𝙞
     ** 𝙎𝙑𝙉𝙄𝙏-𝙎𝙐𝙍𝘼𝙏
     */
    public static void main(String args[]){
        PrintWriter out=new PrintWriter(System.out);
        InputReader in=new InputReader(System.in);
        TASK solver = new TASK();
        int t=1;
//         t = in.nextInt();
        for(int i=0;i<t;i++)
        {
            solver.solve(in,out,i);
        }
        out.close();
    }
    static class TASK {
        static int mod = 1000000000+7;
        void solve(InputReader in, PrintWriter out, int testNumber) {
         int n = in.nextInt();
         int k = in.nextInt();
         char[] s = in.next().toCharArray();
         for(int i=0;i<n;i++)
         {
             if(k==0)
                 break;
             if(i==0)
             {
                 if(s[i]=='1')
                 {
                     if(n==1)
                     {
                         s[i]='0';
                     }
                 }
                 else
                 {
                     s[i]='1';
                     k--;
                 }
             }
             else
             {
                 s[i]='0';
                 k--;
             }
         }
            System.out.println(String.valueOf(s));

        }
    }

    static class pair{
        int x;
        int y;
        pair(int x,int y)
        {
            this.x=x;
            this.y=y;
        }

    }
    static class Maths {
        static long gcd(long a, long b) {
            if (a == 0)
                return b;
            return gcd(b % a, a);
        }

        public static long lcm(long a, long b) {
            return (a * b) / gcd(a, b);
        }

        public static long factorial(int n) {
            long fact = 1;
            for (int i = 1; i <= n; i++) {
                fact *= i;
            }
            return fact;
        }
    }

    static class InputReader {
        private InputStream stream;
        private byte[] buf = new byte[1024];
        private int curChar;
        private int numChars;
        private SpaceCharFilter filter;

        public InputReader(InputStream stream) {
            this.stream = stream;
        }

        public int read() {
            if (numChars == -1)
                throw new InputMismatchException();

            if (curChar >= numChars) {
                curChar = 0;
                try {
                    numChars = stream.read(buf);
                } catch (IOException e) {
                    throw new InputMismatchException();
                }

                if (numChars <= 0)
                    return -1;
            }
            return buf[curChar++];
        }

        public String nextLine() {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }

        public int nextInt() {
            int c = read();

            while (isSpaceChar(c))
                c = read();

            int sgn = 1;

            if (c == '-') {
                sgn = -1;
                c = read();
            }

            int res = 0;
            do {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            }
            while (!isSpaceChar(c));

            return res * sgn;
        }

        public long nextLong() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            long res = 0;

            do {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            }
            while (!isSpaceChar(c));
            return res * sgn;
        }

        public double nextDouble() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            double res = 0;
            while (!isSpaceChar(c) && c != '.') {
                if (c == 'e' || c == 'E')
                    return res * Math.pow(10, nextInt());
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            }
            if (c == '.') {
                c = read();
                double m = 1;
                while (!isSpaceChar(c)) {
                    if (c == 'e' || c == 'E')
                        return res * Math.pow(10, nextInt());
                    if (c < '0' || c > '9')
                        throw new InputMismatchException();
                    m /= 10;
                    res += (c - '0') * m;
                    c = read();
                }
            }
            return res * sgn;
        }

        public String readString() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            StringBuilder res = new StringBuilder();
            do {
                res.appendCodePoint(c);
                c = read();
            }
            while (!isSpaceChar(c));

            return res.toString();
        }

        public boolean isSpaceChar(int c) {
            if (filter != null)
                return filter.isSpaceChar(c);
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }

        public String next() {
            return readString();
        }

        public interface SpaceCharFilter {
            public boolean isSpaceChar(int ch);
        }
    }
}


// package com.company;
import java.util.*;
import java.io.*;
import java.lang.*;

public class Main{
    /*
     ** || ॐ श्री गणेशाय नमः ||
     ** @𝙖𝙪𝙩𝙝𝙤𝙧 𝙅𝙞𝙜𝙖𝙧_𝙉𝙖𝙞𝙣𝙪𝙟𝙞
     ** 𝙎𝙑𝙉𝙄𝙏-𝙎𝙐𝙍𝘼𝙏
     */
    public static void main(String args[]){
        PrintWriter out=new PrintWriter(System.out);
        InputReader in=new InputReader(System.in);
        TASK solver = new TASK();
        int t=1;
//         t = in.nextInt();
        for(int i=0;i<t;i++)
        {
            solver.solve(in,out,i);
        }
        out.close();
    }
    static class TASK {
        static int mod = 1000000000+7;
        void solve(InputReader in, PrintWriter out, int testNumber) {
         int n = in.nextInt();
         int k = in.nextInt();
         char[] s = in.next().toCharArray();
         for(int i=0;i<n;i++)
         {
             if(k==0)
                 break;
             if(i==0)
             {
                 if(s[i]=='1')
                 {
                     if(n==1)
                     {
                         s[i]='0';
                     }
                 }
                 else
                 {
                     s[i]='1';
                     k--;
                 }
             }
             else if(s[i]!='0')
             {
                 s[i]='0';
                 k--;
             }
         }
            System.out.println(String.valueOf(s));

        }
    }

    static class pair{
        int x;
        int y;
        pair(int x,int y)
        {
            this.x=x;
            this.y=y;
        }

    }
    static class Maths {
        static long gcd(long a, long b) {
            if (a == 0)
                return b;
            return gcd(b % a, a);
        }

        public static long lcm(long a, long b) {
            return (a * b) / gcd(a, b);
        }

        public static long factorial(int n) {
            long fact = 1;
            for (int i = 1; i <= n; i++) {
                fact *= i;
            }
            return fact;
        }
    }

    static class InputReader {
        private InputStream stream;
        private byte[] buf = new byte[1024];
        private int curChar;
        private int numChars;
        private SpaceCharFilter filter;

        public InputReader(InputStream stream) {
            this.stream = stream;
        }

        public int read() {
            if (numChars == -1)
                throw new InputMismatchException();

            if (curChar >= numChars) {
                curChar = 0;
                try {
                    numChars = stream.read(buf);
                } catch (IOException e) {
                    throw new InputMismatchException();
                }

                if (numChars <= 0)
                    return -1;
            }
            return buf[curChar++];
        }

        public String nextLine() {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }

        public int nextInt() {
            int c = read();

            while (isSpaceChar(c))
                c = read();

            int sgn = 1;

            if (c == '-') {
                sgn = -1;
                c = read();
            }

            int res = 0;
            do {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            }
            while (!isSpaceChar(c));

            return res * sgn;
        }

        public long nextLong() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            long res = 0;

            do {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            }
            while (!isSpaceChar(c));
            return res * sgn;
        }

        public double nextDouble() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            double res = 0;
            while (!isSpaceChar(c) && c != '.') {
                if (c == 'e' || c == 'E')
                    return res * Math.pow(10, nextInt());
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            }
            if (c == '.') {
                c = read();
                double m = 1;
                while (!isSpaceChar(c)) {
                    if (c == 'e' || c == 'E')
                        return res * Math.pow(10, nextInt());
                    if (c < '0' || c > '9')
                        throw new InputMismatchException();
                    m /= 10;
                    res += (c - '0') * m;
                    c = read();
                }
            }
            return res * sgn;
        }

        public String readString() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            StringBuilder res = new StringBuilder();
            do {
                res.appendCodePoint(c);
                c = read();
            }
            while (!isSpaceChar(c));

            return res.toString();
        }

        public boolean isSpaceChar(int c) {
            if (filter != null)
                return filter.isSpaceChar(c);
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }

        public String next() {
            return readString();
        }

        public interface SpaceCharFilter {
            public boolean isSpaceChar(int ch);
        }
    }
}