#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5;
const long long int inf = 1LL * 1e9 * 1e9;
long long int n, sd[maxn], d[maxn], h[maxn];
pair<long long int, int> seg[4 * maxn][2];
void build(int first = 0, int second = n, int id = 1) {
  if (first == second - 1) {
    seg[id][0].first = 2 * h[first] + sd[first], seg[id][0].second = first;
    seg[id][1].first = 2 * h[first] - sd[first], seg[id][1].second = first;
    return;
  }
  int mid = (first + second) >> 1;
  build(first, mid, id * 2 + 0);
  build(mid, second, id * 2 + 1);
  seg[id][0] = seg[id * 2 + 0][0];
  if (seg[id][0].first < seg[id * 2 + 1][0].first)
    seg[id][0] = seg[id * 2 + 1][0];
  seg[id][1] = seg[id * 2 + 0][1];
  if (seg[id][1].first < seg[id * 2 + 1][1].first)
    seg[id][1] = seg[id * 2 + 1][1];
}
pair<long long int, int> get(int l, int r, int t, int first = 0, int second = n,
                             int id = 1) {
  if (l >= r) return make_pair(-inf, -1);
  if (l == first && r == second) return seg[id][t];
  int mid = (first + second) >> 1;
  pair<long long int, int> ret = make_pair(-inf, -1);
  pair<long long int, int> lc = ret, rc = ret;
  if (l < mid) lc = get(l, min(mid, r), t, first, mid, id * 2 + 0);
  if (r > mid) rc = get(max(l, mid), r, t, mid, second, id * 2 + 1);
  if (lc.second == -1) return rc;
  if (rc.second == -1) return lc;
  ret = lc;
  if (ret.first < rc.first) ret = rc;
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  int m;
  long long int Cir = 0;
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> d[i], d[i + n] = d[i];
  for (int i = 0; i < n; i++) cin >> h[i], h[i + n] = h[i];
  n = 2 * n;
  for (int i = 1; i < n; i++) sd[i] = sd[i - 1] + d[i - 1];
  build();
  while (m--) {
    int a, b, l, r;
    cin >> a >> b;
    a--, b--;
    if (a <= b) a += n / 2;
    l = b + 1, r = a;
    pair<long long int, int> max0 = get(l, r, 0);
    pair<long long int, int> max1 = get(l, r, 1);
    if (max0.second != max1.second)
      cout << max0.first + max1.first << '\n';
    else {
      long long int cand1 = max0.first + max(get(l, max1.second, 1).first,
                                             get(max1.second + 1, r, 1).first);
      long long int cand2 = max1.first + max(get(l, max0.second, 0).first,
                                             get(max0.second + 1, r, 0).first);
      cout << max(cand1, cand2) << '\n';
    }
  }
  return 0;
}
