#include <bits/stdc++.h>
using namespace std;
int N, M;
int d[300010];
int h[300010];
pair<long long, int> L[8 * 300010];
pair<long long, int> R[8 * 300010];
void agg(int nodo, int left, int right, int pos, long long val, char tipo) {
  if (left == right) {
    if (tipo == 'L')
      L[nodo] = pair<long long, int>(val, pos);
    else
      R[nodo] = pair<long long, int>(val, pos);
    return;
  }
  int mid = (left + right) / 2;
  if (pos <= mid)
    agg(nodo * 2, left, mid, pos, val, tipo);
  else
    agg(nodo * 2 + 1, mid + 1, right, pos, val, tipo);
  if (tipo == 'L')
    L[nodo] = max(L[nodo * 2], L[nodo * 2 + 1]);
  else
    R[nodo] = max(R[nodo * 2], R[nodo * 2 + 1]);
}
pair<long long, int> q(int nodo, int left, int right, int l, int r, char tipo) {
  if (left == l && right == r) {
    if (tipo == 'L')
      return L[nodo];
    else
      return R[nodo];
  }
  int mid = (left + right) / 2;
  if (r <= mid) return q(nodo * 2, left, mid, l, r, tipo);
  if (l >= mid + 1) return q(nodo * 2 + 1, mid + 1, right, l, r, tipo);
  if (l <= mid && r >= mid + 1)
    return max(q(nodo * 2, left, mid, l, mid, tipo),
               q(nodo * 2 + 1, mid + 1, right, mid + 1, r, tipo));
}
int main() {
  ifstream in("input.txt");
  cin >> N >> M;
  for (int i = 0; i < N; i++) cin >> d[i];
  for (int i = 0; i < N; i++) cin >> h[i];
  for (int i = 0; i < 8 * 300010; i++) L[i].first = R[i].first = LLONG_MIN;
  long long cum = 0;
  for (int i = 0; i < N; i++) {
    agg(1, 0, 2 * 300010 - 1, i, cum + h[i] * 2, 'R');
    agg(1, 0, 2 * 300010 - 1, i, h[i] * 2 - cum, 'L');
    cum += d[i];
  }
  for (int i = 0; i < N; i++) {
    agg(1, 0, 2 * 300010 - 1, i + N, cum + h[i] * 2, 'R');
    agg(1, 0, 2 * 300010 - 1, i + N, h[i] * 2 - cum, 'L');
    cum += d[i];
  }
  for (int i = 0; i < M; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    pair<long long, int> temp;
    long long res = 0;
    if (a <= b) {
      temp = q(1, 0, 2 * 300010 - 1, b + 2, N + a - 1, 'R');
      temp.first += q(1, 0, 2 * 300010 - 1, b + 1, temp.second - 1, 'L').first;
      res = temp.first;
      temp = q(1, 0, 2 * 300010 - 1, b + 1, N + a - 2, 'L');
      temp.first +=
          q(1, 0, 2 * 300010 - 1, temp.second + 1, N + a - 1, 'R').first;
      res = max(res, temp.first);
    } else {
      temp = q(1, 0, 2 * 300010 - 1, b + 2, a - 1, 'R');
      temp.first += q(1, 0, 2 * 300010 - 1, b + 1, temp.second - 1, 'L').first;
      res = temp.first;
      temp = q(1, 0, 2 * 300010 - 1, b + 1, a - 2, 'L');
      temp.first += q(1, 0, 2 * 300010 - 1, temp.second + 1, a - 1, 'R').first;
      res = max(res, temp.first);
    }
    cout << res << endl;
  }
  return 0;
}
