#include <bits/stdc++.h>
using namespace std;
template <class T>
typename T::value_type arr_sum(const T &v, int n) {
  typename T::value_type sum = 0;
  for (int i = (0); i < (n); ++i) sum += v[i];
  return sum;
}
struct Sync_stdio {
  Sync_stdio() {
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);
  }
} _sync_stdio;
const int MAXN = 1000000;
long long t[4 * MAXN];
long long idx[4 * MAXN];
void build(vector<long long> &a, int v, int tl, int tr) {
  if (tl == tr) {
    t[v] = a[tl];
    idx[v] = tl;
  } else {
    int tm = (tl + tr) / 2;
    build(a, v * 2 + 1, tl, tm);
    build(a, v * 2 + 2, tm + 1, tr);
    t[v] = max(t[v * 2 + 1], t[v * 2 + 2]);
    idx[v] = t[v * 2 + 1] > t[v * 2 + 2] ? idx[v * 2 + 1] : idx[v * 2 + 2];
  }
}
pair<long long, long long> sum(int v, int tl, int tr, int l, int r) {
  if (l > r) return {LLONG_MIN, -1};
  if (l == tl && r == tr) return {t[v], idx[v]};
  int tm = (tl + tr) / 2;
  pair<long long, long long> s1 = sum(v * 2 + 1, tl, tm, l, min(r, tm));
  pair<long long, long long> s2 = sum(v * 2 + 2, tm + 1, tr, max(l, tm + 1), r);
  return s1.first > s2.first ? s1 : s2;
}
const int MAXN2 = 1000000;
long long t2[4 * MAXN];
long long idx2[4 * MAXN];
void build2(vector<long long> &a, int v, int tl, int tr) {
  if (tl == tr) {
    t2[v] = a[tl];
    idx2[v] = tl;
  } else {
    int tm = (tl + tr) / 2;
    build2(a, v * 2 + 1, tl, tm);
    build2(a, v * 2 + 2, tm + 1, tr);
    t2[v] = max(t2[v * 2 + 1], t2[v * 2 + 2]);
    idx2[v] = t2[v * 2 + 1] > t2[v * 2 + 2] ? idx[v * 2 + 1] : idx[v * 2 + 2];
  }
}
pair<long long, long long> sum2(int v, int tl, int tr, int l, int r) {
  if (l > r) return {LLONG_MIN, -1};
  if (l == tl && r == tr) return {t2[v], idx2[v]};
  int tm = (tl + tr) / 2;
  pair<long long, long long> s1 = sum2(v * 2 + 1, tl, tm, l, min(r, tm));
  pair<long long, long long> s2 =
      sum2(v * 2 + 2, tm + 1, tr, max(l, tm + 1), r);
  return s1.first > s2.first ? s1 : s2;
}
int main() {
  int n, m;
  cin >> n >> m;
  vector<long long> d(n);
  vector<long long> h(n);
  for (int i = 0; i < (n); ++i) cin >> d[i];
  ;
  for (int i = 0; i < (n); ++i) cin >> h[i];
  ;
  vector<long long> l(2 * n);
  vector<long long> r(2 * n);
  l[0] = 2 * h[0];
  r[0] = 2 * h[0];
  for (int i = (1); i < (2 * n); ++i) {
    l[i] = l[i - 1] + d[(i + n - 1) % n] + 2 * (h[i % n] - h[(i + n - 1) % n]);
    r[i] = r[i - 1] - d[(i + n - 1) % n] + 2 * (h[i % n] - h[(i + n - 1) % n]);
  }
  build(l, 0, 0, 2 * n - 1);
  build2(r, 0, 0, 2 * n - 1);
  for (int i = (0); i < (m); ++i) {
    int a, b;
    cin >> a >> b;
    --a;
    --b;
    a = (a + n - 1) % n;
    b = (b + 1) % n;
    swap(a, b);
    if (a >= b) {
      b += n;
    }
    pair<long long, long long> s1 = sum2(0, 0, 2 * n - 1, a, b);
    pair<long long, long long> s2 = sum(0, 0, 2 * n - 1, a, b);
    if (s1.second == s2.second) {
      pair<long long, long long> s3 =
          max(sum2(0, 0, 2 * n - 1, a, s2.second - 1),
              sum2(0, 0, 2 * n - 1, s2.second + 1, b));
      pair<long long, long long> s4 =
          max(sum(0, 0, 2 * n - 1, a, s1.second - 1),
              sum(0, 0, 2 * n - 1, s1.second + 1, b));
      cout << max(s1.first + s4.first, s2.first + s3.first) << "\n";
      continue;
    }
    cout << s1.first + s2.first << "\n";
  }
}
