#include<iostream>
using namespace std;
#define INF (1<<28)
int N,M;
int t[20000];
int u[20000];
int dp[20000][256];

void init(){
  for(int i=0;i<20000;i++)
    for(int j=0;j<256;j++)
      dp[i][j]=INF;
}

int calc(int a,int b){
  if(a+b<0)return 0;
  if(a+b>=256)return 255;
  return a+b;
}

int dist(int a,int b){
  return (a-b)*(a-b);
}

int main(){
  while(1){
    cin>>N>>M;
    if(N==0&&M==0)break;
    init();
    for(int i=0;i<M;i++)cin>>t[i];
    for(int i=0;i<N;i++)cin>>u[i];
    for(int i=0;i<M;i++)dp[0][calc(128,t[i])]=dist(calc(128,t[i]),u[0]);

    for(int i=0;i+1<N;i++){
      for(int j=0;j<256;j++){
	if(dp[i][j]==INF)continue;
	//cout<<i<<' '<<j<<' '<<dp[i][j]<<endl;
	for(int k=0;k<M;k++){
	  int A=calc(j,t[k]);
	  //cout<<A<<endl;
	  dp[i+1][A]=min(dp[i+1][A],dp[i][j]+dist(A,u[i+1]));
	  
	}
      }
    }
    int ans=INF;
    for(int i=0;i<256;i++)
      ans=min(ans,dp[N-1][i]);
    cout<<ans<<endl;
  }
  return 0;
}