/*
状态转移方程式:
dp[i][j]=Min(dp[i][j-1],dp[i-1][j-2]+(a[j-1]-a[j])*(a[j-1]-a[j]));
依次求出第i个人在第j个数时的所求的最小值
*/
#include<stdio.h>
#include<string.h>
#define N 5100
int dp[1100][N];
int a[N];
int Min(int v,int vv) {
return v>vv?vv:v;
}
int main() {
int t,k,n,i,j;
scanf("%d",&t);
while(t--) {
scanf("%d%d",&k,&n);
k+=8;
for(i=n;i>=1;i--)//排成非递增数列
scanf("%d",&a[i]);
memset(dp,0,sizeof(dp));
for(i=1;i<=k;i++) {
dp[i][i*3]=dp[i-1][i*3-2]+(a[i*3-1]-a[i*3])*(a[i*3-1]-a[i*3]);//初始化
for(j=i*3+1;j<=n;j++)//i*3是边界
dp[i][j]=Min(dp[i][j-1],dp[i-1][j-2]+(a[j-1]-a[j])*(a[j-1]-a[j]));
}
printf("%d\n",dp[k][n]);
}
return 0;
}