#include<iostream>
#include<algorithm>
#define N 20001
#define M 256
#define INF 1000000000

using namespace std;

int n, m;
int c[16];
int dp[N][M];

void init(){
  for(int i=0; i<N; ++i){
    for(int j=0; j<M; ++j){
      dp[i][j] = INF;
    }
  }
  dp[0][128] = 0;
}

int code(int k){
  if(k < 0) return 0;
  if(k >= M) return M-1;
  return k;
}

void solve(int& x, int& u, int& v){
  for(int i=0; i<m; ++i){
    int j = code(v + c[i]);
    dp[u][j] = min(dp[u][j], (x-j)*(x-j) + dp[u-1][v]);
  }
}

int main(){
  int x;
  while(1){
    cin >> n >> m;
    if(!n && !m) break;
    init();
    for(int i=0; i<m; ++i) cin >> c[i];
    for(int i=1; i<=n; ++i){
      cin >> x;
      for(int j=0; j<M; ++j){
	if(dp[i-1][j] != INF) solve(x, i, j);
      }
    }
    int ans=INF;
    for(int j=0; j<M; ++j) ans = min(ans, dp[n][j]);
    cout << ans << endl;
  }
  return 0;
}