#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 2;
struct Z {
  long long a, x, y;
};
int i, j, n, m, S, h[N];
long long X[N * 4], Y[N * 4], a[N * 4], d[N];
Z Mer(Z a, Z b) {
  return (Z){max(max(a.a, b.a), max(b.y - a.x, a.y - b.x)), min(a.x, b.x),
             max(a.y, b.y)};
}
void B(int p, int L, int R) {
  if (L == R) {
    X[p] = d[L] - h[L], Y[p] = d[L] + h[L];
    return;
  }
  B(p << 1, L, L + R >> 1), B(p << 1 | 1, L + R + 2 >> 1, R);
  X[p] = min(X[p << 1], X[p << 1 | 1]), Y[p] = max(Y[p << 1], Y[p << 1 | 1]);
  a[p] = max(max(a[p << 1], a[p << 1 | 1]),
             max(Y[p << 1 | 1] - X[p << 1], Y[p << 1] - X[p << 1 | 1]));
}
Z A(int p, int L, int R, int l, int r) {
  if (L == l && R == r) return (Z){a[p], X[p], Y[p]};
  int m = L + R >> 1;
  if (l > m) return A(p << 1 | 1, m + 1, R, l, r);
  if (r <= m) return A(p << 1, L, m, l, r);
  return Mer(A(p << 1, L, m, l, m), A(p << 1 | 1, m + 1, R, m + 1, r));
}
int main() {
  scanf("%d%d", &n, &m);
  for (i = 2; i <= n + 1; d[i] += d[i - 1], ++i)
    scanf("%lld", d + i), d[i + n] = d[i];
  for (S = n + n; i <= S; ++i) d[i] += d[i - 1];
  for (i = 1; i <= n; h[i + n] = h[i++] <<= 1) scanf("%d", h + i);
  for (B(1, 1, S); m--; printf("%lld\n", *d)) {
    scanf("%d%d", &i, &j);
    if (j < i)
      *d = A(1, 1, S, j + 1, i - 1).a;
    else
      *d = A(1, 1, S, j + 1, i + n - 1).a;
  }
}
