#include <bits/stdc++.h>
using namespace std;
#define maxn1 5005
#define maxn2 1100
int d[maxn1][maxn2];
int p(int a)
{
return a*a;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int t;scanf("%d",&t);
while(t--){
int k,n;
scanf("%d%d",&k,&n);
int dd[maxn1];
for (int i=1;i<=n;i++){
scanf("%d",&dd[i]);
}
sort(dd+1,dd+n+1);
memset(d,0,sizeof(d));
d[n-2][1]=p(dd[n-2]-dd[n-1]);
for (int i=n-3;i>=1;i--){
for (int is=1;is<=k+8;is++){
if (n-i+1<3*is) break;
if (n-i+1==3*is){
d[i][is]=d[i+2][is-1]+p(dd[i]-dd[i+1]);
}
if (n-i+1>3*is){
d[i][is]=min(d[i+1][is],d[i+2][is-1]+p(dd[i]-dd[i+1]));
}
}
}
printf("%d\n",d[1][k+8]);
}
return 0;
}
d[i][k]:由i~n这些数值来组成k组
if(n-i+1<3*k) 无法组成
if (n-i+1==3*k) 正好可以组成 d[i][k]=d[i+2][k-1]+p(dd[i]-dd[i+1])
if(n-i+1>3*k) 可以组成 d[i][k]=min(d[i+1][k],d[i+2][k-1]+p(dd[i]-dd[i+1]))