#include "bits/stdc++.h"

using namespace std;

#define REP(i,n) for(int i=0;i<(n);i++)
#define REPR(i,n) for(int i=(n)-1;i>=0;i--)

#define FOR(i,m,n) for(int i=(m);i<(n);i++)
#define int long long
#define ALL(x) (x).begin(),(x).end()
typedef pair<int, int> pii;

int dp[20020][400];//i番目までで、y[i]=jとしたときの誤差の二乗和の最小値

void solve() {
	int N, M; cin >> N >> M;
	if (N == 0)exit(0);
	vector<int>C(M);
	REP(i, M)cin >> C[i];
	vector<int>X(N);
	REP(i, N) {
		cin >> X[i];
	}
	REP(i, N + 1) {
		REP(j, 300)dp[i][j] = 1e18;
	}
	dp[0][128] = 0;
	REP(i, N) {
		REP(j, 256) {
			for (int c : C) {
				int nxt = j + c;
				if (nxt < 0)nxt = 0;
				if (nxt > 255)nxt = 255;
				int dif = X[i] - nxt;
				dif *= dif;
				dp[i + 1][nxt] = min(dp[i + 1][nxt], dp[i][j] + dif);
			}
		}
	}
	int ans = 1e18;
	REP(j, 256) {
		ans = min(ans, dp[N][j]);
	}
	cout << ans << endl;
}

signed main() {
	while(true)solve();
}

