#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 10;
const long long inf = 1e18;
int n, m, d[MAXN], h[MAXN], mx[MAXN][20], mn[MAXN][20], lg[MAXN];
long long A[MAXN], B[MAXN];
int MAX(int x, int y) {
  if (A[x] > A[y]) return x;
  return y;
}
int MIN(int x, int y) {
  if (B[x] < B[y]) return x;
  return y;
}
void getin() {
  long long s = 0;
  A[0] = -inf;
  B[0] = inf;
  for (int i = 1; i <= 2 * n; i++) {
    s += d[i];
    A[i] = s + h[i];
    B[i] = s - h[i];
    mx[i][0] = mn[i][0] = i;
  }
  lg[2] = 1;
  for (int i = 3; i <= 2 * n; i++) lg[i] = lg[i >> 1] + 1;
  for (int i = 1; i <= 20; i++)
    for (int j = 1; j + (1 << i) - 1 <= 2 * n; j++) {
      mx[j][i] = MAX(mx[j][i - 1], mx[j + (1 << (i - 1))][i - 1]);
      mn[j][i] = MIN(mn[j][i - 1], mn[j + (1 << (i - 1))][i - 1]);
    }
}
int qmax(int l, int r) {
  if (l > r) return 0;
  int k = lg[r - l + 1];
  int x = MAX(mx[l][k], mx[r - (1 << k) + 1][k]);
  return x;
}
int qmin(int l, int r) {
  if (l > r) return 0;
  int k = lg[r - l + 1];
  int x = MIN(mn[l][k], mn[r - (1 << k) + 1][k]);
  return x;
}
long long Q(int l, int r) {
  int x = qmax(l, r), y = qmin(l, r);
  if (x != y) return A[x] - B[y];
  int ax = MAX(qmax(l, x - 1), qmax(x + 1, r));
  int ay = MIN(qmin(l, x - 1), qmin(x + 1, r));
  return max(A[ax] - B[y], A[x] - B[ay]);
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++)
    scanf("%d", &d[(i + 1) % n]), d[(i + 1) % n + n] = d[(i + 1) % n];
  for (int i = 1; i <= n; i++) scanf("%d", &h[i]), h[i] *= 2, h[i + n] = h[i];
  getin();
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    if (x <= y)
      printf("%lld\n", Q(y + 1, x + n - 1));
    else
      printf("%lld\n", Q(y + 1, x - 1));
  }
  return 0;
}
