#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e5 + 100;
long long seg[maxn * 4];
long long ps[maxn], h[maxn], d[maxn];
vector<pair<long long, long long> > vecL[maxn * 4], vecR[maxn * 4];
long long sum(long long fi, long long se) { return ps[se] - ps[fi]; }
void built(long long id, long long first, long long second) {
  if (first == second - 1) {
    seg[id] = -1;
    return;
  }
  long long mid = (first + second) >> 1;
  built(id * 2 + 0, first, mid);
  built(id * 2 + 1, mid, second);
  seg[id] = max(seg[id * 2 + 0], seg[id * 2 + 1]);
  vecL[id].resize(mid - first);
  long long cnt = 0;
  for (long long i = mid - 1; i >= first; i--) {
    if (cnt == 0)
      vecL[id][cnt] = make_pair(i, sum(i, mid - 1) + h[i]);
    else {
      vecL[id][cnt] = vecL[id][cnt - 1];
      if (vecL[id][cnt].second < sum(i, mid - 1) + h[i])
        vecL[id][cnt] = make_pair(i, sum(i, mid - 1) + h[i]);
    }
    cnt++;
  }
  cnt = 0;
  vecR[id].resize(second - mid);
  for (long long i = mid; i < second; i++) {
    if (cnt == 0)
      vecR[id][cnt] = make_pair(i, sum(mid, i) + h[i]);
    else {
      vecR[id][cnt] = vecR[id][cnt - 1];
      if (vecR[id][cnt].second < sum(mid, i) + h[i])
        vecR[id][cnt] = make_pair(i, sum(mid, i) + h[i]);
    }
    cnt++;
  }
  seg[id] = max(seg[id], vecL[id].back().second + vecR[id].back().second +
                             sum(mid - 1, mid));
}
long long get(long long id, long long first, long long second, long long l,
              long long r) {
  if (l == first and r == second) {
    return seg[id];
  }
  long long ret = -1, mid = (first + second) >> 1;
  if (l < mid) ret = max(ret, get(id * 2 + 0, first, mid, l, min(mid, r)));
  if (r > mid) ret = max(ret, get(id * 2 + 1, mid, second, max(mid, l), r));
  if (l < mid and r > mid)
    ret = max(ret, vecL[id][mid - 1 - l].second + vecR[id][r - mid - 1].second +
                       sum(mid - 1, mid));
  return ret;
}
long long dpL[maxn], dpR[maxn];
int main() {
  ios_base::sync_with_stdio(false);
  long long n, m;
  cin >> n >> m;
  for (long long i = 1; i <= n; i++) {
    cin >> d[i];
    ps[i] = ps[i - 1] + d[i - 1];
  }
  for (long long i = 1; i <= n; i++) {
    cin >> h[i];
    h[i] *= 2;
    dpL[i] = dpL[i - 1];
    dpL[i] = max(dpL[i], h[i] + sum(1, i));
  }
  for (long long i = n; i >= 1; i--) {
    dpR[i] = dpR[i + 1];
    dpR[i] = max(dpR[i], h[i] + sum(i, n));
  }
  built(1, 1, n + 1);
  while (m--) {
    long long fi, se;
    cin >> fi >> se;
    if (fi > se)
      cout << get(1, 1, n + 1, se + 1, fi) << '\n';
    else {
      long long ret = 0;
      if (fi > 1) ret = max(ret, get(1, 1, n + 1, 1, fi));
      if (se < n) ret = max(ret, get(1, 1, n + 1, se + 1, n + 1));
      if (fi > 1 and se < n) ret = max(ret, dpL[fi - 1] + dpR[se + 1] + d[n]);
      cout << ret << '\n';
    }
  }
}
