#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100100;
int n, m;
int d[MAXN];
long long psd[MAXN];
int h[MAXN];
long long dist(int l, int r) { return psd[r] - psd[l]; }
const int LOG2N = 17;
struct RangeMax {
  long long val[MAXN];
  int cal[MAXN][LOG2N];
  int fun;
  void init(int n, int binfun) {
    fun = binfun;
    for (int i = 0; i < n; i++) cal[i][0] = i;
    for (int j = 1; j < LOG2N; j++)
      for (int i = 0; i + (1 << j) - 1 < n; i++) {
        int a = cal[i][j - 1];
        int b = cal[i + (1 << j - 1)][j - 1];
        if (val[a] == val[b])
          cal[i][j] = fun == 0 ? min(a, b) : max(a, b);
        else if (val[a] > val[b])
          cal[i][j] = a;
        else
          cal[i][j] = b;
      }
  }
  int idxofmax(int l, int r) {
    if (l <= r)
      return idxofmax2(l, r);
    else {
      int i1 = idxofmax2(l, n - 1);
      int i2 = idxofmax2(0, r);
      if (fun == 0)
        return val[i1] > val[i2] - dist(0, n - 1) - d[n - 1] ? i1 : i2;
      else
        return val[i1] - dist(0, n - 1) - d[n - 1] > val[i2] ? i1 : i2;
    }
  }
  int idxofmax2(int l, int r) {
    int log2 = 0;
    while (l + (1 << log2) - 1 <= r) log2++;
    log2--;
    int a = cal[l][log2];
    int b = cal[r - (1 << log2) + 1][log2];
    if (val[a] == val[b])
      return fun == 0 ? min(a, b) : max(a, b);
    else if (val[a] > val[b])
      return a;
    else
      return b;
  }
};
RangeMax del;
RangeMax del2;
long long morning(int l, int r) {
  return 2LL * h[l] + 2LL * h[r] +
         (l < r ? dist(l, r) : dist(l, n - 1) + d[n - 1] + dist(0, r));
}
long long solve(int a, int b) {
  int l = del.idxofmax(a, b);
  int r = del2.idxofmax(a, b);
  if (l == r) {
    long long val1 =
        a == l ? 0 : morning(del.idxofmax(a, l - 1 == -1 ? n - 1 : l - 1), l);
    long long val2 =
        r == b ? 0 : morning(r, del2.idxofmax(r + 1 == n ? 0 : r + 1, b));
    return max(val1, val2);
  } else
    return morning(l, r);
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> d[i];
    psd[i] = i == 0 ? 0 : psd[i - 1] + d[i - 1];
  }
  for (int i = 0; i < n; i++) {
    cin >> h[i];
    del.val[i] = 2LL * h[i] - dist(0, i);
    del2.val[i] = 2LL * h[i] - dist(i, n - 1);
  }
  del.init(n, 0);
  del2.init(n, 1);
  for (int foo = 0; foo < m; foo++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    cout << solve(b + 1 == n ? 0 : b + 1, a - 1 == -1 ? n - 1 : a - 1) << "\n";
  }
  return 0;
}
