#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1e9 + 7;
const int mxn = 2e5 + 100;
const long long int inf = -1e18;
long long int gcd(long long int a, long long int b) {
  return !b ? a : gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return (a / gcd(a, b)) * b;
}
long long int pw(long long int x, long long int y) {
  long long int r = 1;
  while (y) {
    if (y & 1) r = 1LL * r * x % mod;
    x = 1LL * x * x % mod;
    y >>= 1;
  }
  return r;
}
int n, m;
pair<long long int, int> seg[mxn << 2], seg2[mxn << 2];
long long int h[mxn << 1], d[mxn];
vector<pair<int, int> > Q;
void build(int v, int tl, int tr) {
  if (tl == tr) {
    seg[v] = make_pair(d[tl] + 2 * h[tl], tl);
  } else {
    int tm = (tl + tr) >> 1;
    build((v << 1), tl, tm);
    build(((v << 1) | 1), tm + 1, tr);
    seg[v] = max(seg[(v << 1)], seg[((v << 1) | 1)]);
  }
}
void build2(int v, int tl, int tr) {
  if (tl == tr) {
    seg2[v] = make_pair(2 * h[tl] - d[tl], tl);
  } else {
    int tm = (tl + tr) >> 1;
    build2((v << 1), tl, tm);
    build2(((v << 1) | 1), tm + 1, tr);
    seg2[v] = max(seg2[(v << 1)], seg2[((v << 1) | 1)]);
  }
}
pair<long long int, int> ask(int v, int tl, int tr, int l, int r) {
  if (l > r) return make_pair(inf, -1);
  if (tl == l && tr == r) return seg[v];
  int tm = (tl + tr) >> 1;
  return max(ask((v << 1), tl, tm, l, min(r, tm)),
             ask(((v << 1) | 1), tm + 1, tr, max(l, tm + 1), r));
}
pair<long long int, int> ask2(int v, int tl, int tr, int l, int r) {
  if (l > r) return make_pair(inf, -1);
  if (tl == l && tr == r) return seg2[v];
  int tm = (tl + tr) >> 1;
  return max(ask2((v << 1), tl, tm, l, min(r, tm)),
             ask2(((v << 1) | 1), tm + 1, tr, max(l, tm + 1), r));
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> d[i + 1];
  }
  for (int i = 1; i <= n; i++) {
    cin >> h[i];
  }
  d[1] = d[n + 1];
  d[n + 1] = 0;
  for (int i = 1; i <= m; i++) {
    int a, b;
    cin >> a >> b;
    Q.push_back(make_pair(a, b));
  }
  for (int i = n + 1; i <= n << 1; i++) {
    d[i] = d[i - n];
    h[i] = h[i - n];
  }
  for (int i = 1; i <= n << 1; i++) {
    d[i] += d[i - 1];
  }
  for (int i = 1; i <= mxn << 2; i++) seg2[i] = make_pair(inf, -1);
  build(1, 1, n << 1);
  build2(1, 1, n << 1);
  for (auto it : Q) {
    int x = it.first, y = it.second;
    if (x <= y) {
      x = n + x;
    }
    pair<long long int, int> r = ask(1, 1, n << 1, y + 1, x - 1);
    pair<long long int, int> l = ask2(1, 1, n << 1, y + 1, x - 1);
    if (r.second == l.second) {
      pair<long long int, int> rt = max(ask(1, 1, n << 1, y + 1, r.second - 1),
                                        ask(1, 1, n << 1, r.second + 1, x - 1));
      pair<long long int, int> lt =
          max(ask2(1, 1, n << 1, y + 1, r.second - 1),
              ask2(1, 1, n << 1, r.second + 1, x - 1));
      cout << max(r.first + lt.first, l.first + rt.first) << '\n';
    } else {
      cout << r.first + l.first << '\n';
    }
  }
  return 0;
}
