#include <bits/stdc++.h>
using namespace std;
const double eps = 1E-8;
const int dx4[4] = {1, 0, 0, -1};
const int dy4[4] = {0, -1, 1, 0};
const int inf = 0x3f3f3f3f;
const int N = 2E5 + 7;
int n, m;
long long d[N], h[N];
struct node {
  long long mx;
  long long lx;
  long long rx;
} tree[N << 2];
void PushUp(int rt) {
  tree[rt].lx = max(tree[rt << 1].lx, tree[rt << 1 | 1].lx);
  tree[rt].rx = max(tree[rt << 1].rx, tree[rt << 1 | 1].rx);
  tree[rt].mx = max(tree[rt << 1].lx + tree[rt << 1 | 1].rx,
                    max(tree[rt << 1].mx, tree[rt << 1 | 1].mx));
}
void build(int l, int r, int rt) {
  if (l == r) {
    tree[rt].mx = 0;
    tree[rt].lx = 2 * h[l] - d[l - 1];
    tree[rt].rx = 2 * h[l] + d[l - 1];
    return;
  }
  int m = (l + r) >> 1;
  build(l, m, rt << 1);
  build(m + 1, r, rt << 1 | 1);
  PushUp(rt);
}
node query(int L, int R, int l, int r, int rt) {
  if (L <= l && r <= R) return tree[rt];
  int m = (l + r) >> 1;
  node null;
  null.mx = 0;
  null.lx = -(~0ull >> 1);
  null.rx = -(~0ull >> 1);
  node resl, resr, res;
  resl = resr = res = null;
  if (L <= m) resl = query(L, R, l, m, rt << 1);
  if (R >= m + 1) resr = query(L, R, m + 1, r, rt << 1 | 1);
  if (resl.lx == -(~0ull >> 1)) {
    res.lx = max(res.lx, resr.lx);
    res.rx = max(res.rx, resr.rx);
    res.mx = max(res.mx, resr.mx);
  } else if (resr.lx == -(~0ull >> 1)) {
    res.lx = max(res.lx, resl.lx);
    res.rx = max(res.rx, resl.rx);
    res.mx = max(res.mx, resl.mx);
  } else {
    res.mx = max(resl.mx, resr.mx);
    res.lx = max(resl.lx, resr.lx);
    res.rx = max(resl.rx, resr.rx);
    res.mx = max(resl.lx + resr.rx, res.mx);
  }
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> d[i], d[i + n] = d[i];
  for (int i = 1; i <= n; i++) cin >> h[i], h[i + n] = h[i];
  for (int i = 1; i <= 2 * n; i++) d[i] = d[i - 1] + d[i];
  build(1, n << 1, 1);
  while (m--) {
    int x, y;
    cin >> x >> y;
    node ans;
    if (x <= y)
      ans = query(y + 1, x + n - 1, 1, n << 1, 1);
    else
      ans = query(y + 1, x - 1, 1, n << 1, 1);
    cout << ans.mx << endl;
  }
  return 0;
}
