#include using namespace std; struct Line { long long m, b; }; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int N, Q; cin >> N >> Q; vector A(N); for (int i = 0; i < N; ++i) { cin >> A[i]; } vector delta(N-1); for (int i = 0; i < N-1; ++i) { delta[i] = A[i+1] - A[i]; } sort(delta.begin(), delta.end()); vector pre(N, 0); for (int i = 0; i < N-1; ++i) { pre[i+1] = pre[i] + delta[i]; } vector hull; for (int i = 0; i < N; ++i) { long long m = -i; long long b = A[i]; while (hull.size() >= 2) { Line l1 = hull[hull.size()-2]; Line l2 = hull[hull.size()-1]; long long term1 = (l2.b - l1.b) * (m - l1.m); long long term2 = (l1.m - l2.m) * (b - l1.b); if (term1 + term2 >= 0) { hull.pop_back(); } else { break; } } hull.push_back({m, b}); } while (Q--) { long long d; cin >> d; int k = upper_bound(delta.begin(), delta.end(), d) - delta.begin(); long long first = k * d - pre[k]; int left = 0, right = hull.size() - 1; while (left < right) { int mid = (left + right) / 2; long long val1 = hull[mid].m * d + hull[mid].b; long long val2 = hull[mid+1].m * d + hull[mid+1].b; if (val1 >= val2) { right = mid; } else { left = mid + 1; } } long long max_val = hull[left].m * d + hull[left].b; long long second = max_val - A[0]; cout << first + second << '\n'; } return 0; }