#include <bits/stdc++.h>
using namespace std;
struct No {
  int hl, hr;
  long long int ans;
};
vector<No> tree;
vector<long long int> h, pref;
int n, m;
long long int dist(int a, int b) {
  return 2 * (h[a] + h[b]) + (a < b ? pref[b - 1] - pref[a - 1]
                                    : pref[n] - pref[a - 1] + pref[b - 1]);
}
No make_no(int a) {
  No no;
  no.hl = no.hr = a;
  no.ans = 0;
  return no;
}
No combine(No a, No b) {
  No no;
  no = (a.ans > b.ans ? a : b);
  if (a.ans == -1 or b.ans == -1) return no;
  if (no.ans < dist(a.hl, b.hl) and a.hl != b.hl)
    no.ans = dist(a.hl, b.hl), no.hl = a.hl, no.hr = b.hl;
  if (no.ans < dist(a.hl, b.hr) and a.hl != b.hr)
    no.ans = dist(a.hl, b.hr), no.hl = a.hl, no.hr = b.hr;
  if (no.ans < dist(a.hr, b.hl) and a.hr != b.hl)
    no.ans = dist(a.hr, b.hl), no.hl = a.hr, no.hr = b.hl;
  if (no.ans < dist(a.hr, b.hr) and a.hr != b.hr)
    no.ans = dist(a.hr, b.hr), no.hl = a.hr, no.hr = b.hr;
  return no;
}
void build(int x, int l, int r) {
  if (l == r) {
    tree[x] = make_no(l);
    return;
  }
  build((2 * x), l, (l + r) / 2);
  build((2 * x) + 1, (l + r) / 2 + 1, r);
  tree[x] = combine(tree[(2 * x)], tree[(2 * x) + 1]);
}
No query(int x, int l, int r, int ql, int qr) {
  if (ql > r or qr < l or l > r) {
    No lx;
    lx.ans = -1;
    lx.hl = lx.hr = 0;
    return lx;
  }
  if (ql <= l and r <= qr) {
    return tree[x];
  }
  return combine(query((2 * x), l, (l + r) / 2, ql, qr),
                 query((2 * x) + 1, (l + r) / 2 + 1, r, ql, qr));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> m;
  tree.resize(4 * n);
  h.resize(n + 5);
  pref.resize(n + 5);
  pref[0] = h[0] = 0;
  for (int i = 1; i <= n; i++) {
    cin >> pref[i];
    pref[i] += pref[i - 1];
  }
  for (int i = 1; i <= n; i++) cin >> h[i];
  build(1, 1, n);
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    No esq, dir, res;
    if (a <= b) {
      esq = query(1, 1, n, 1, a - 1);
      dir = query(1, 1, n, b + 1, n);
      res = combine(dir, esq);
    } else
      res = query(1, 1, n, b + 1, a - 1);
    cout << res.ans << endl;
  }
  return 0;
}
