#include <bits/stdc++.h>
const double pi = acos(-1.0);
const double eps = 1e-9;
using namespace std;
struct node {
  long long mnAns, mxAns, ans;
};
const int N = 2e5 + 10;
const long long INF = 1e18;
long long pref[N], d[N], h[N];
int n, q;
node t[4 * N];
node merge(node a, node b) {
  node res;
  res.mnAns = min(a.mnAns, b.mnAns);
  res.mxAns = max(a.mxAns, b.mxAns);
  res.ans = max(a.ans, b.ans);
  res.ans = max(res.ans, b.mxAns - a.mnAns);
  return res;
}
void build(int v, int tl, int tr) {
  if (tl == tr) {
    t[v] = {-2 * h[tl] + pref[tl], 2 * h[tl] + pref[tl], 0};
  } else {
    int tm = (tl + tr) >> 1;
    build(v * 2, tl, tm);
    build(v * 2 + 1, tm + 1, tr);
    t[v] = merge(t[v * 2], t[v * 2 + 1]);
  }
}
int it = 0;
node get(int v, int tl, int tr, int l, int r) {
  if (l > r) {
    return {INF, -INF, 0ll};
  }
  if (tl == l && tr == r) {
    return t[v];
  }
  int tm = (tl + tr) >> 1;
  return merge(get(v * 2, tl, tm, l, min(r, tm)),
               get(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
}
void solve() {
  cin >> n >> q;
  for (int i = 1; i <= n; i++) {
    cin >> d[i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> h[i];
  }
  for (int i = 2; i <= n + 1; i++) {
    pref[i] = pref[i - 1] + d[i - 1];
  }
  for (int i = n + 2; i <= 2 * n; i++) {
    pref[i] = pref[i - 1] + d[i - n - 1];
  }
  for (int i = n + 1; i < 2 * n; i++) {
    h[i] = h[i - n];
  }
  build(1, 1, 2 * n - 1);
  while (q--) {
    int a, b;
    cin >> a >> b;
    if (a <= b) {
      cout << get(1, 1, 2 * n - 1, b + 1, n + a - 1).ans << "\n";
    } else {
      cout << get(1, 1, 2 * n - 1, b + 1, a - 1).ans << "\n";
    }
  }
}
int main() {
  ios::sync_with_stdio(NULL), cin.tie(0), cout.tie(0);
  cout.setf(ios::fixed), cout.precision(3);
  int step = 1;
  for (int i = 0; i < step; i++) {
    solve();
  }
}
