#include <bits/stdc++.h>
using namespace std;
long long a[100000 << 1 | 1], b[100000 << 1 | 1];
typedef const int& ci;
template <typename T>
void init(T* a, ci n, T (*st1)[17 + 2], int (*pos)[17 + 2], T (*st2)[17 + 2]) {
  for (int i = 0; ++i <= n;
       st1[i][0] = a[i], pos[i][0] = i, st2[i][0] = -9223372036854775807ll)
    ;
  for (int i = 0, bas = 1, hbs = 1, x = 0; ++i, (bas <<= 1) <= n;
       x = i, hbs = bas)
    for (int j = n - bas + 2, k; --j;
         st1[j][x] > st1[k = j + hbs][x]
             ? (st1[j][i] = st1[j][x], pos[j][i] = pos[j][x],
               st2[j][i] = max(st2[j][x], st1[k][x]))
             : (st1[j][i] = st1[k][x], pos[j][i] = pos[k][x],
               st2[j][i] = max(st1[j][x], st2[k][x])))
      ;
}
template <typename T>
void query(T (*st)[17 + 2], int (*pos)[17 + 2], T (*st2)[17 + 2], int l, ci r,
           T& fst, int& ps, T& scd) {
  int k = 32 - __builtin_clz(r - l + 1);
  fst = scd = -9223372036854775807ll, ps = -1;
  for (int tmp; l <= r; l += tmp) {
    (tmp = 1 << (--k)) + l > (r + 1) &&
        (tmp = 1 << (k = 31 - __builtin_clz(r - l + 1)));
    if (st[l][k] > fst) {
      scd = max(fst, st2[l][k]);
      fst = st[l][k], ps = pos[l][k];
    } else
      st[l][k] > scd && (scd = st[l][k]);
  }
}
long long sta[100000 << 1 | 1][17 + 2], stb[100000 << 1 | 1][17 + 2];
int posa[100000 << 1 | 1][17 + 2], posb[100000 << 1 | 1][17 + 2];
long long st2a[100000 << 1 | 1][17 + 2], st2b[100000 << 1 | 1][17 + 2];
int main() {
  int n, m;
  scanf("%d%d", &n, &m), a[1] = 0;
  long long* ed = a + n;
  for (long long *i = a, x; ++i <= ed; *(i + 1) = *i + x) scanf("%lld", &x);
  long long s = a[n + 1];
  for (long long* i = a + 1; ++i <= ed; *(i + n) = *i + s)
    ;
  for (int i = 0, x; ++i <= n; a[i] += x, a[i + n] += x) {
    scanf("%d", &x);
    b[i] = (x <<= 1) - a[i];
    b[i + n] = x - a[i + n];
  }
  init(a, n << 1, sta, posa, st2a);
  init(b, n << 1, stb, posb, st2b);
  long long fsta, scda, fstb, scdb;
  for (int i = m + 1, l, r, psa, psb; --i;
       printf("%lld\n",
              psa == psb ? max(fsta + scdb, fstb + scda) : (fsta + fstb))) {
    scanf("%d%d", &l, &r);
    swap(--l, ++r);
    l > r && (r += n);
    query(sta, posa, st2a, l, r, fsta, psa, scda),
        query(stb, posb, st2b, l, r, fstb, psb, scdb);
  }
  return 0;
}
