#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
const int INF = (int)1e9 + 7;
const long long LINF = (long long)9e18 + 7;
const long long P1 = 353251;
const long long P2 = 239017;
const long long MOD = 1e9 + 7;
const long long MOD1 = 1e9 + 7;
const long long MOD2 = 1e9 + 9;
struct st {
  long long ma, mi;
  pair<long long, long long> p;
  bool f;
  st() {}
  st(long long mi1, long long ma1, pair<long long, long long> p1, bool f1) {
    ma = ma1, mi = mi1, p = p1, f = f1;
  }
};
int n, m;
int d[200007];
int h[200007];
long long sum[200007];
st t[4 * 200007];
pair<long long, long long> ge(pair<long long, long long> a,
                              pair<long long, long long> b) {
  if (a.second - a.first > b.second - b.first) return a;
  return b;
}
void build(int v, int vl, int vr) {
  if (vl == vr) {
    t[v] = st(sum[vl - 1] - (long long)2 * h[vl],
              sum[vl - 1] + (long long)2 * h[vl],
              make_pair(sum[vl - 1] - (long long)2 * h[vl],
                        sum[vl - 1] + (long long)2 * h[vl]),
              1);
  } else {
    int vm = (vl + vr) >> 1;
    build(v * 2 + 1, vl, vm);
    build(v * 2 + 2, vm + 1, vr);
    t[v].mi = min(t[v * 2 + 1].mi, t[v * 2 + 2].mi);
    t[v].ma = max(t[v * 2 + 1].ma, t[v * 2 + 2].ma);
    pair<long long, long long> now =
        make_pair(t[v * 2 + 1].mi, t[v * 2 + 2].ma);
    if (!t[v * 2 + 1].f) now = ge(now, t[v * 2 + 1].p);
    if (!t[v * 2 + 2].f) now = ge(now, t[v * 2 + 2].p);
    t[v].p = now;
    t[v].f = 0;
  }
}
st get(int v, int vl, int vr, int l, int r) {
  if (vl >= l && vr <= r) {
    return t[v];
  } else {
    int vm = (vl + vr) >> 1;
    if (l > vm) return get(v * 2 + 2, vm + 1, vr, l, r);
    if (r <= vm) return get(v * 2 + 1, vl, vm, l, r);
    st s1 = get(v * 2 + 1, vl, vm, l, r);
    st s2 = get(v * 2 + 2, vm + 1, vr, l, r);
    pair<long long, long long> now = make_pair(s1.mi, s2.ma);
    if (!s1.f) now = ge(now, s1.p);
    if (!s2.f) now = ge(now, s2.p);
    return st(min(s1.mi, s2.mi), max(s1.ma, s2.ma), now, 0);
  }
}
const bool is_testing = 0;
int main() {
  srand('D' + 'E' + 'N' + 'I' + 'S' + 'S' + 'O' + 'N');
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  if (is_testing) {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
  } else {
  }
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> d[i];
  for (int i = 1; i <= n; i++) cin >> h[i];
  for (int i = n + 1; i <= 2 * n; i++) h[i] = h[i - n], d[i] = d[i - n];
  for (int i = 1; i <= 2 * n; i++) sum[i] = sum[i - 1] + d[i];
  build(0, 1, 2 * n);
  for (int i = 0; i < m; i++) {
    int l, r;
    cin >> l >> r;
    if (l <= r) {
      st kek = get(0, 1, 2 * n, r + 1, n + l - 1);
      cout << kek.p.second - kek.p.first << "\n";
    } else {
      st kek = get(0, 1, 2 * n, r + 1, l - 1);
      cout << kek.p.second - kek.p.first << "\n";
    }
  }
}
