#include <bits/stdc++.h>
using namespace std;
using namespace std::chrono;
const long long INF = 1000 * 1000 * 1000 * 1ll * 1000 * 1000 * 1000;
vector<long long int> v;
long long int h[200005], d[200005], x[200005], y[200005];
struct seg {
  long long int a, b, c;
};
seg node[800005];
void build(long long int l, long long int r, long long int pos) {
  if (r < l) return;
  if (r == l) {
    node[pos].a = 0;
    node[pos].b = y[l];
    node[pos].c = x[l];
    return;
  }
  long long int mid = (l + r) / 2;
  build(l, mid, 2 * pos + 1);
  build(mid + 1, r, 2 * pos + 2);
  long long int l1 = 2 * pos + 1, l2 = 2 * pos + 2;
  node[pos].a = max(node[l1].a, node[l2].a);
  node[pos].b = max(node[l1].b, node[l2].b);
  node[pos].c = max(node[l1].c, node[l2].c);
  node[pos].a = max(node[pos].a, node[l1].b + node[l2].c);
}
seg query(long long int qlow, long long int qhigh, long long int l,
          long long int r, long long int pos) {
  if (qhigh < l || qlow > r) {
    return {-INF, -INF, -INF};
  }
  if (l >= qlow && r <= qhigh) {
    return node[pos];
  }
  long long int mid = (l + r) / 2;
  seg left = query(qlow, qhigh, l, mid, 2 * pos + 1);
  seg right = query(qlow, qhigh, mid + 1, r, 2 * pos + 2);
  seg ans;
  ans.a = max(left.a, right.a);
  ans.b = max(left.b, right.b);
  ans.c = max(left.c, right.c);
  ans.a = max(ans.a, left.b + right.c);
  return ans;
}
signed main() {
  std::ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, q;
  cin >> n >> q;
  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[n + i] = h[i];
  }
  for (long long int i = 1; i < n + n; i++) {
    d[i] += d[i - 1];
  }
  x[0] = 2 * h[0];
  y[0] = 2 * h[0];
  n *= 2;
  for (long long int i = 1; i < n; i++) {
    x[i] = 2 * h[i] + d[i - 1];
    y[i] = 2 * h[i] - d[i - 1];
  }
  build(0, n - 1, 0);
  while (q--) {
    long long int l, r;
    cin >> l >> r;
    seg ans;
    if (l <= r) {
      ans = query(r, l - 2 + n / 2, 0, n - 1, 0);
    } else {
      ans = query(r, l - 2, 0, n - 1, 0);
    }
    cout << ans.a << '\n';
  }
}
