#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
ostream cnull(NULL);
const int INF = 1000 * 1000 * 1000;
const long long LINF = 1LL * INF * INF;
const int MAX = 200010;
const long double PI = acos(-1.);
const double EPS = 1e-6;
const long long mod = INF + 7;
struct val {
  long long best, bestL, bestR;
  val(long long x, long long y) {
    bestL = -y + 2 * x;
    bestR = y + 2 * x;
    best = 0;
  }
  val() { best = bestL = bestR = 0; }
};
val combine(val a, val b) {
  val ret;
  ret.bestL = max(a.bestL, b.bestL);
  ret.bestR = max(a.bestR, b.bestR);
  ret.best = max(max(a.best, b.best), max(a.bestL + b.bestR, 0LL));
  return ret;
}
struct ST {
  val t[MAX * 4];
  void build(pair<long long, long long>* a, int v, int tl, int tr) {
    if (tl == tr) {
      t[v] = val(a[tl].first, a[tl].second);
      return;
    }
    int tm = (tl + tr) / 2;
    build(a, v + v, tl, tm);
    build(a, v + v + 1, tm + 1, tr);
    t[v] = combine(t[v + v], t[v + v + 1]);
  }
  val get(int v, int tl, int tr, int l, int r) {
    if (tl == l && tr == r) {
      return t[v];
    }
    int tm = (tl + tr) / 2;
    if (l >= tm + 1) {
      return get(v + v + 1, tm + 1, tr, l, r);
    }
    if (r <= tm) {
      return get(v + v, tl, tm, l, r);
    }
    return combine(get(v + v, tl, tm, l, tm),
                   get(v + v + 1, tm + 1, tr, tm + 1, r));
  }
} q;
int n, m;
long long d[200005];
long long h[200005];
pair<long long, long long> a[200005];
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m;
  for (int i = 0; i < n; ++i) {
    cin >> d[i + 1];
    d[i + n + 1] = d[i + 1];
  }
  for (int i = 0; i < n; ++i) {
    cin >> h[i];
    h[i + n] = h[i];
  }
  int nn = 2 * n + 1;
  for (int i = 0; i < nn; ++i) {
    if (i) {
      a[i].second = a[i - 1].second;
    }
    a[i].first = h[i];
    a[i].second += d[i];
  }
  q.build(a, 1, 0, nn - 1);
  for (int i = 0; i < m; ++i) {
    int l, r;
    cin >> l >> r;
    l--, r--;
    if (l <= r) {
      cout << q.get(1, 0, nn - 1, r + 1, l + n - 1).best << endl;
    } else {
      cout << q.get(1, 0, nn - 1, r + 1, l - 1).best << endl;
    }
  }
  return 0;
}
