#include <bits/stdc++.h>
using namespace std;
template <class T>
bool uin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
bool uax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
struct TResult {
  long long res, maxl, maxr, L;
  TResult(long long res = -1e9, long long maxl = -1e9, long long maxr = -1e9,
          long long L = 0)
      : res(res), maxl(maxl), maxr(maxr), L(L) {}
  TResult operator+(const TResult &r) {
    TResult ans;
    ans.res = max(max(res, r.res), maxr + r.maxl);
    ans.maxl = max(maxl, r.maxl + L);
    ans.maxr = max(r.maxr, maxr + r.L);
    ans.L = L + r.L;
    return ans;
  }
};
struct TNode {
  int L, R;
  int left, right;
  TResult res;
  TNode(int L = -1, int R = -1) : L(L), R(R), left(-1), right(-1), res() {}
};
const int MAXT = 500000;
const int MAXN = 110000;
TNode t[MAXT];
long long d[MAXN], h[MAXN];
int tc = 0;
int buildTree(int L, int R) {
  int node = tc++;
  t[node] = TNode(L, R);
  if (R - L == 1) {
    t[node].res = TResult(h[L] + h[R] + d[L], h[R] + d[L], h[L] + d[L], d[L]);
    return node;
  }
  int M = (L + R) / 2;
  t[node].left = buildTree(L, M);
  t[node].right = buildTree(M, R);
  t[node].res = t[t[node].left].res + t[t[node].right].res;
  return node;
}
TResult getSeg(int node, int L, int R) {
  if (max(L, t[node].L) >= min(R, t[node].R)) return TResult();
  if (L <= t[node].L && t[node].R <= R) return t[node].res;
  return getSeg(t[node].left, L, R) + getSeg(t[node].right, L, R);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(10);
  cout << fixed;
  int N, M;
  cin >> N >> M;
  for (int i = 0; i < (int)(N); ++i) cin >> d[i];
  for (int i = 0; i < (int)(N); ++i) {
    cin >> h[i];
    h[i] *= 2;
  }
  h[N] = h[0];
  buildTree(0, N);
  for (int i = 0; i < (int)(M); ++i) {
    int l, r;
    cin >> l >> r;
    --l;
    TResult res;
    if (l < r) {
      res = getSeg(0, r, l == 0 ? N - 1 : N);
      if (l > 1) res = res + getSeg(0, 0, l - 1);
    } else {
      res = getSeg(0, r, l - 1);
    }
    cout << res.res << '\n';
  }
  return 0;
}
