#include <bits/stdc++.h>
using namespace std;
const int inf = 1 << 29;
const int mod = (int)1e9 + 7;
int n, m, k;
long long d[200010], h[200010];
int ldp[200010][20], rdp[200010][20];
long long lsum[200010], rsum[200010];
void rmp_init() {
  for (int i = 1; i <= 2 * n; i++) ldp[i][0] = rdp[i][0] = i;
  for (int j = 1; j < 20; j++) {
    for (int i = 1; i + (1 << j) - 1 <= 2 * n; i++) {
      int l = i, r = i + (1 << j) - 1;
      int mid = r - (1 << (j - 1)) + 1;
      {
        int lf = ldp[l][j - 1], rt = ldp[mid][j - 1];
        if (rsum[lf] + 2 * h[lf] >= rsum[rt] + 2 * h[rt]) {
          ldp[i][j] = lf;
        } else
          ldp[i][j] = rt;
      }
      {
        int lf = rdp[l][j - 1], rt = rdp[mid][j - 1];
        if (lsum[lf] - d[lf] + 2 * h[lf] > lsum[rt] - d[rt] + 2 * h[rt]) {
          rdp[i][j] = lf;
        } else
          rdp[i][j] = rt;
      }
    }
  }
}
int rmp_l(int l, int r) {
  if (l > r) return 0;
  int k = log2(r - l + 1);
  if (k == 0) return l;
  int mid = r - (1 << k) + 1;
  int lf = ldp[l][k], rt = ldp[mid][k];
  if (rsum[lf] + 2 * h[lf] >= rsum[rt] + 2 * h[rt]) {
    return lf;
  } else
    return rt;
}
int rmp_r(int l, int r) {
  if (l > r) return 0;
  int k = log2(r - l + 1);
  if (k == 0) return l;
  int mid = r - (1 << k) + 1;
  int lf = rdp[l][k], rt = rdp[mid][k];
  if (lsum[lf] - d[lf] + 2 * h[lf] > lsum[rt] - d[rt] + 2 * h[rt]) {
    return lf;
  } else
    return rt;
}
long long solve(int l, int r) {
  long long ans1, ans2;
  int lf, rt;
  lf = rmp_l(l, r);
  rt = rmp_r(lf + 1, r);
  if (rt != 0)
    ans1 = 2 * (h[lf] + h[rt]) + lsum[rt - 1] - lsum[lf - 1];
  else
    ans1 = -1;
  rt = rmp_r(l, r);
  lf = rmp_l(l, rt - 1);
  if (lf != 0)
    ans2 = 2 * (h[lf] + h[rt]) + lsum[rt - 1] - lsum[lf - 1];
  else
    ans2 = -1;
  return max(ans1, ans2);
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) scanf("%I64d", &d[i]), d[i + n] = d[i];
  for (int i = 1; i <= n; i++) scanf("%I64d", &h[i]), h[i + n] = h[i];
  for (int i = 1; i <= 2 * n; i++) lsum[i] += d[i] + lsum[i - 1];
  for (int i = 2 * n; i >= 1; i--) rsum[i] += d[i] + rsum[i + 1];
  int l, r;
  rmp_init();
  while (m--) {
    scanf("%d %d", &l, &r);
    if (l <= r)
      swap(l, r), l++, r += n - 1;
    else
      swap(l, r), l++, r--;
    printf("%I64d\n", solve(l, r));
  }
  return 0;
}
