#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;

#define INF (1<<31-1)
int dp[20001][256];

int tw(int n, int c)
{
	return (n-c)*(n-c);
}
int ck(int n)
{
	if(n<=0) return 0;
	if(n>=255) return 255;
	
	return n;	
}

int main()
{
	int N,M, c[16];
	while(cin >> N >> M, (N||M))
	{
		int Lv;
		for(int i=0; i<M; i++)
		cin >> c[i];
		
		for(int i=0; i<=N; i++)
		for(int j=0; j<256; j++)
		{
			dp[i][j] = INF;
		}
		
		dp[0][128] = 0;
		for(int i=0; i<N; i++)
		{
			cin >> Lv;
			
			for(int j=0; j<256; j++)
			{
				if(dp[i][j]!=INF)
				{
					for(int k=0; k<M; k++)
					{
						int nc = ck(j+c[k]);
						dp[i+1][nc] = min(dp[i+1][nc], dp[i][j]+tw(nc,Lv));
					}
				}
			}
		}
		
		int m = INF;
		for(int i=0; i<256; i++)
		{
			m=min(m,dp[N][i]);
		}
		cout << m << endl;
	}
}