#include<cstdio>
#include<algorithm>
#include<vector>
#include<deque>
#include<string>
#include<iostream>
using namespace std;
//AOJ2199
bool solve(void){//?????°???????????????????????????
	int N,M,i,j,k,q;
	const long long int big=1919114514;// >20000*256*256
	long long int ans=big;
	vector<int>cod;
	long long int dp[256];
	long long int ddp[256];
	for(i=0;i<=127;i++){dp[i]=big;}
	dp[128]=0;
	for(i=129;i<256;i++){dp[i]=big;}
	scanf("%d %d",&N,&M);
	if(N*M==0){return false;}
	for(i=0;i<M;i++){
		scanf("%d",&q);
		cod.push_back(q);
	}
	for(i=0;i<N;i++){
		scanf("%d",&q);
		for(j=0;j<256;j++){
			for(k=0;k<cod.size();k++){
				ddp[min(255,max(j+cod[k],0))]=min(ddp[min(255,max(j+cod[k],0))],dp[j]);
			}
		}
		for(j=0;j<256;j++){
			dp[j]=ddp[j]+(q-j)*(q-j);
			ddp[j]=big;
		}
	}
	for(j=0;j<256;j++){
		ans=min(ans,dp[j]);
	}
	printf("%lld\n",ans);
	return true;
}
int main(void){while(solve()){}return 0;}