#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7, siz = 2e5 + 5;
long long n, m, k, d[siz], pre[siz], h[siz];
struct st {
  long long lft, rit, best;
} tree[4 * siz];
struct st2 {
  long long ll, rr, cur;
};
void build(long long par, long long l, long long r) {
  if (l == r) {
    tree[par].best = 2 * h[l];
    tree[par].lft = -pre[l - 1] + 2 * h[l];
    tree[par].rit = pre[r - 1] + 2 * h[l];
    return;
  }
  long long mid = l + r >> 1;
  build(2 * par, l, mid);
  build(2 * par + 1, mid + 1, r);
  long long lft_best = tree[2 * par].best;
  long long rit_best = tree[2 * par + 1].best;
  long long cur_best = tree[2 * par].lft + tree[2 * par + 1].rit;
  tree[par].best = max(lft_best, max(rit_best, cur_best));
  tree[par].lft = max(tree[2 * par].lft, tree[2 * par + 1].lft);
  tree[par].rit = max(tree[2 * par].rit, tree[2 * par + 1].rit);
}
st2 get_max(long long par, long long l, long long r, long long L, long long R) {
  if (r < L or l > R) {
    st2 ret;
    ret.ll = -1e18;
    ret.rr = -1e18;
    ret.cur = -1e18;
    return ret;
  }
  if (l >= L and r <= R) {
    st2 ret;
    ret.cur = tree[par].best;
    ret.ll = tree[par].lft;
    ret.rr = tree[par].rit;
    return ret;
  }
  long long mid = l + r >> 1;
  st2 ret_l = get_max(2 * par, l, mid, L, R);
  st2 ret_r = get_max(2 * par + 1, mid + 1, r, L, R);
  st2 ret;
  ret.cur = max(ret_l.cur, max(ret_r.cur, ret_l.ll + ret_r.rr));
  ret.ll = max(ret_l.ll, ret_r.ll);
  ret.rr = max(ret_l.rr, ret_r.rr);
  return ret;
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (long long i = 1; i <= n; i++) cin >> d[i];
  for (long long i = 1; i <= n; i++) cin >> h[i];
  for (long long i = n + 1; i <= 2 * n; i++) d[i] = d[i - n];
  for (long long i = n + 1; i <= 2 * n; i++) h[i] = h[i - n];
  for (long long i = 1; i <= 2 * n; i++) pre[i] = pre[i - 1] + d[i];
  build(1, 1, 2 * n);
  while (m--) {
    long long x, y;
    cin >> x >> y;
    long long lft, rit;
    if (x <= y) {
      lft = y + 1;
      rit = n + x - 1;
    } else {
      lft = y + 1;
      rit = x - 1;
    }
    long long ans;
    if (lft > rit)
      ans = 0;
    else
      ans = get_max(1, 1, 2 * n, lft, rit).cur;
    cout << ans << endl;
  }
}
