#include<stdio.h>
#include<algorithm>
using namespace std;
int dp[2][256];
int c[16];
int d[20000];
int M(int a){return a*a;}
int main(){
	int inf=999999999;
	int a,b;
	while(scanf("%d%d",&a,&b),a){
		for(int i=0;i<b;i++)scanf("%d",c+i);
		for(int i=0;i<a;i++)scanf("%d",d+i);
		for(int i=0;i<2;i++)for(int j=0;j<256;j++)dp[i][j]=inf;
		dp[0][128]=0;
		for(int i=0;i<a;i++){
			for(int j=0;j<256;j++)dp[(i+1)%2][j]=inf;
			for(int j=0;j<256;j++){
				if(dp[i&1][j]==inf)continue;
				for(int k=0;k<b;k++)dp[!(i&1)][max(min(j+c[k],255),0)]=min(dp[!(i&1)][max(min(j+c[k],255),0)],dp[i&1][j]+M(d[i]-(max(min(j+c[k],255),0))));
			}
		}
		int ret=999999999;
		for(int i=0;i<256;i++)ret=min(ret,dp[a&1][i]);printf("%d\n",ret);
	}
}