#include <bits/stdc++.h>
using namespace std;
int c[30], x[30000];
int dp[300000][256];
int sq(int x) { return x * x; }
int add(int x, int y) { return max(0, min(255, x + y)); }
int main(void) {
  while (1) {
    int n, m;
    scanf("%d%d", &n, &m);
    if (!n) break;
    memset(dp, 0x6F, sizeof(dp));
    for (int i = 0; i < m; i++) scanf("%d", &c[i]);
    for (int i = 0; i < n; i++) scanf("%d", &x[i]);
    for (int i = 0; i < 256; i++) dp[0][i] = 0xFFFFFF;
    dp[0][128] = 0;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < 256; j++)
        for (int k = 0; k < m; k++)
          dp[i + 1][add(j, c[k])] =
              min(dp[i + 1][add(j, c[k])], dp[i][j] + sq(x[i] - add(j, c[k])));
    int res = 0xFFFFFF;
    for (int j = 0; j < 256; j++) res = min(res, dp[n][j]);
    printf("%d\n", res);
  }
  return 0;
}
