#include <bits/stdc++.h>
using namespace std;
long long d[2 * 100005];
long long h[2 * 100005];
long long u[2 * 100005], v[2 * 100005], ur[1005], vr[1005], bu[1005];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    cin >> d[i + 1];
    d[n + i] = d[i];
  }
  for (int i = 1; i <= 2 * n; ++i) d[i] += d[i - 1];
  for (int i = 1; i <= n; ++i) {
    cin >> h[i];
    h[i] *= 2;
    h[n + i] = h[i];
  }
  for (int i = 1; i <= 2 * n; ++i) {
    u[i] = d[i] + h[i];
    v[i] = d[i] - h[i];
  }
  fill(vr, vr + 1005, 1e18);
  int rt = sqrt(n), j = 0;
  for (int i = 1; i <= 2 * n; ++i) {
    if (i % rt == 0) ++j;
    ur[j] = max(ur[j], u[i]);
    bu[j] = max(bu[j], u[i] - vr[j]);
    vr[j] = min(vr[j], v[i]);
  }
  while (m--) {
    int q1, q2;
    cin >> q1 >> q2;
    if (q1 <= q2) {
      q1 += n;
      q1--;
      q2++;
      swap(q1, q2);
    } else {
      q2++;
      q1--;
      swap(q1, q2);
    }
    int p1 = q1 / rt, p2 = q2 / rt;
    long long U = 0, V = 1E18;
    if (p1 == p2) {
      for (int i = q1; i <= q2; ++i) U = max(U, u[i] - V), V = min(V, v[i]);
    } else {
      for (int i = q1; i < (p1 + 1) * rt; ++i)
        U = max(U, u[i] - V), V = min(V, v[i]);
      for (int i = p1 + 1; i < p2; ++i) {
        U = max(U, bu[i]);
        U = max(U, ur[i] - V);
        V = min(V, vr[i]);
      }
      for (int i = p2 * rt; i <= q2; ++i)
        U = max(U, u[i] - V), V = min(V, v[i]);
    }
    cout << U << endl;
  }
  return 0;
}
