#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
const int SZ = 8e5 + 10, INF = 0x7FFFFFFF;
long long mod = 1000000009;
long long srcdst[SZ], dst[SZ], tall[SZ], a[SZ], b[SZ], s[SZ], arr[SZ];
long long n, m;
void init(long long n) {
  for (long long i = 2; i <= n + 1; ++i) {
    cin >> dst[i];
  }
  for (long long i = n + 2; i < 2 * n + 1; ++i) {
    dst[i] = dst[i - n];
  }
  for (long long i = 2; i <= 2 * n + 1; ++i) {
    dst[i] += dst[i - 1];
  }
  for (long long i = 1; i <= n; ++i) cin >> arr[i];
}
void pushup(long long rt) {
  a[rt] = max(a[rt * 2], a[rt * 2 + 1]);
  b[rt] = max(b[rt * 2], b[rt * 2 + 1]);
  long long m1 = max(s[rt * 2], s[rt * 2 + 1]);
  long long m2 = max(a[rt * 2] + b[rt * 2 + 1], a[rt * 2 + 1] + b[rt * 2]);
  s[rt] = max(m1, m2);
}
void build(long long ll, long long rr, long long rt) {
  if (ll == rr) {
    long long real = (ll - 1) % (n / 2) + 1;
    a[rt] = 2 * arr[real] + dst[ll];
    b[rt] = 2 * arr[real] - dst[ll];
    return;
  }
  if (ll > rr) return;
  long long mid = (ll + rr) / 2;
  build(ll, mid, rt * 2);
  build(mid + 1, rr, rt * 2 + 1);
  pushup(rt);
}
struct nd {
  long long a, b, s;
  nd(long long _a = 0, long long _b = 0, long long _s = 0)
      : a(_a), b(_b), s(_s) {}
  bool operator==(const nd &rbs) const {
    return a == rbs.a && b == rbs.b && s == rbs.s;
  }
};
nd qry(long long ll, long long rr, long long ql, long long qr, long long rt) {
  nd res1, res2, rbs;
  if (ll >= ql && rr <= qr) {
    nd tmp;
    tmp.a = a[rt], tmp.b = b[rt], tmp.s = s[rt];
    return tmp;
  }
  if (rr < ql || ll > qr) return rbs;
  long long mid = (ll + rr) / 2;
  if (rr >= ql) res1 = qry(ll, mid, ql, qr, rt * 2);
  if (ll <= qr) res2 = qry(mid + 1, rr, ql, qr, rt * 2 + 1);
  if (res1 == rbs)
    return res2;
  else if (res2 == rbs)
    return res1;
  else {
    long long max1 = max(res1.s, res2.s);
    long long max2 = max(res1.a + res2.b, res1.b + res2.a);
    res1.s = max(max1, max2);
    res1.a = max(res1.a, res2.a);
    res1.b = max(res1.b, res2.b);
    return res1;
  }
}
int main() {
  std::ios::sync_with_stdio(0);
  cin >> n >> m;
  init(n);
  n = 2 * n + 1;
  build(1, n, 1);
  for (long long i = 0; i < m; ++i) {
    long long ql, qr;
    cin >> ql >> qr;
    if (ql <= qr) {
      swap(ql, qr);
      ++ql;
      qr += n / 2 - 1;
    } else {
      swap(ql, qr);
      ++ql, --qr;
    }
    cout << qry(1, n, ql, qr, 1).s << endl;
  }
  return 0;
}
