#include <bits/stdc++.h>
using namespace std;
const int N = 200020;
const int LG = 19;
int d[N], h[N], lg[N];
long long valL[N], valR[N];
pair<int, int> L[N][LG];
pair<int, int> R[N][LG];
int tmp[4];
pair<int, int> best(const pair<int, int> &a, const pair<int, int> &b,
                    long long val[N]) {
  tmp[0] = a.first;
  tmp[1] = a.second;
  tmp[2] = b.first;
  tmp[3] = b.second;
  sort(tmp, tmp + 4, [&](const int &a, const int &b) -> bool {
    if (b == -1) return 1;
    if (a == -1) return 0;
    return val[a] > val[b];
  });
  pair<int, int> ret = make_pair(tmp[0], -1);
  for (int i = 1; i < 4; ++i) {
    if (tmp[i] != tmp[0]) {
      ret.second = tmp[i];
      break;
    }
  }
  return ret;
}
pair<int, int> query(pair<int, int> T[N][LG], long long val[N], int l, int r) {
  int lv = lg[r - l + 1];
  return best(T[l][lv], T[r - (1 << lv) + 1][lv], val);
}
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; ++i) {
    scanf("%d", d + i);
    d[i + n] = d[i];
  }
  for (int i = 0; i < n; ++i) {
    scanf("%d", h + i);
    h[i + n] = h[i];
  }
  lg[2] = 1;
  for (int i = 3; i <= n + n; ++i) {
    lg[i] = lg[i >> 1] + 1;
  }
  long long c = 0;
  for (int i = 0; i < n + n; ++i) {
    valL[i] = -c + h[i] * 2;
    valR[i] = c + h[i] * 2;
    L[i][0] = make_pair(i, -1);
    R[i][0] = make_pair(i, -1);
    c += d[i];
  }
  for (int lv = 1; (1 << lv) <= n + n; ++lv) {
    for (int i = 0; i + (1 << lv) <= n + n; ++i) {
      L[i][lv] = best(L[i][lv - 1], L[i + (1 << (lv - 1))][lv - 1], valL);
      R[i][lv] = best(R[i][lv - 1], R[i + (1 << (lv - 1))][lv - 1], valR);
    }
  }
  while (m--) {
    int a, b;
    scanf("%d %d", &a, &b);
    --a;
    --b;
    if (a > b)
      ++b, --a;
    else
      a += n - 1, ++b;
    swap(a, b);
    auto ll = query(L, valL, a, b);
    auto rr = query(R, valR, a, b);
    long long ans = 0;
    if (ll.first == rr.first) {
      ans = valL[ll.first] + valR[rr.second];
      ans = max(ans, valL[ll.second] + valR[rr.first]);
    } else {
      ans = valL[ll.first] + valR[rr.first];
    }
    printf("%I64d\n", ans);
  }
  return 0;
}
