#include <bits/stdc++.h>
using namespace std;
using namespace std;
int gcd(int a, int b) {
  if (b == 0) return a;
  if (a == 0) return b;
  return gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return a * b / gcd(a, b);
}
long long int power(long long int a, long long int p, long long int m) {
  long long int re = 1;
  re %= m;
  for (; p; p >>= 1) {
    if (p & 1) re = re * a % m;
    a = a * a % m;
  }
  return re;
}
struct data {
  long long int sum, pref, suff, ans;
};
long long int d[200000], h[200000];
data t[600000];
data make_data(long long int l, long long int r) {
  data ret;
  ret.sum = d[l] + 2 * h[l] + 2 * h[r];
  ret.pref = d[l] + 2 * h[l] + 2 * h[r];
  ret.suff = d[l] + 2 * h[l] + 2 * h[r];
  ret.ans = d[l] + 2 * h[l] + 2 * h[r];
  return ret;
}
void build(long long int cur, long long int l, long long int r) {
  if (l == r - 1) {
    t[cur] = make_data(l, r);
    return;
  }
  long long int m = (l + r) / 2;
  build(2 * cur, l, m);
  build(2 * cur + 1, m, r);
  t[cur].sum = t[cur * 2].sum + t[cur * 2 + 1].sum - 4 * h[m];
  t[cur].pref =
      max(t[2 * cur].pref, t[2 * cur].sum + t[2 * cur + 1].pref - 4 * h[m]);
  t[cur].suff =
      max(t[2 * cur + 1].suff, t[2 * cur + 1].sum + t[2 * cur].suff - 4 * h[m]);
  t[cur].ans = max(max(t[2 * cur].ans, t[2 * cur + 1].ans),
                   t[2 * cur].suff + t[2 * cur + 1].pref - 4 * h[m]);
  return;
}
data query(long long int cur, long long int l, long long int r,
           long long int ql, long long int qr) {
  if (l >= ql && r <= qr) {
    return t[cur];
  }
  long long int m = (l + r) / 2;
  if (qr <= m) {
    return query(2 * cur, l, m, ql, qr);
  }
  if (ql >= m) {
    return query(2 * cur + 1, m, r, ql, qr);
  }
  data tmp1 = query(2 * cur, l, m, ql, qr);
  data tmp2 = query(2 * cur + 1, m, r, ql, qr);
  data ret;
  ret.sum = tmp1.sum + tmp2.sum - 4 * h[m];
  ret.pref = max(tmp1.pref, tmp1.sum + tmp2.pref - 4 * h[m]);
  ret.suff = max(tmp2.suff, tmp2.sum + tmp1.suff - 4 * h[m]);
  ret.ans = max(max(tmp1.ans, tmp2.ans), tmp1.suff + tmp2.pref - 4 * h[m]);
  return ret;
}
int main() {
  long long int n, m;
  cin >> n >> m;
  for (long long int i = 0; i < n; i++) {
    cin >> d[i];
    d[i + n] = d[i];
  }
  for (long long int i = 0; i < n; i++) {
    cin >> h[i];
    h[i + n] = h[i];
  }
  n = n * 2;
  build(1, 0, n - 1);
  while (m--) {
    long long int a, b;
    cin >> a >> b;
    a--;
    b--;
    if (a <= b) {
      data d1 = query(1, 0, n - 1, b + 1, n / 2 + a - 1);
      cout << d1.ans << endl;
    } else {
      data d1 = query(1, 0, n - 1, b + 1, a - 1);
      cout << d1.ans << endl;
    }
  }
}
