#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <sstream>

using namespace std;

long long int DP[20001][256];

int main(){
	
	int N, M;
	
	while(true){
		cin >> N >> M;
		if(N == 0){
			break;
		}
		
		int C[20];
		
		for(int i = 0; i < M; i++){
			cin >> C[i];
		}
		
		long long int x[20001];
		
		for(int i = 0; i < N; i++){
			cin >> x[i];
		}
		
		for(int i = 0; i <= N; i++){
			for(int j = 0; j < 256; j++){
				DP[i][j] = 100000000000;
			}
		}
		
		DP[0][128] = 0;
		
		for(int i = 0; i < N; i++){
			for(int j = 0; j < M; j++){
				for(int k = 0; k < 256; k++){
					int index = max(0, min(255, k + C[j]));
					DP[i + 1][index] = min(DP[i + 1][index], DP[i][k] + (x[i] - index) * (x[i] - index));
				}
			}
		}
		
		long long int ans = 100000000000;
		
		for(int i = 0; i < 256; i++){
			ans = min(ans, DP[N][i]);
		}
		
		cout << ans << endl;
		
	}
	
	return 0;
}