#include <bits/stdc++.h>
using namespace std;
const long long INf = 1e18;
long long n, node[4][3000000], d[200100], h[200100], pl[4][200100];
void make(int l, int r, int x) {
  if (l == r) {
    node[0][x] = node[1][x] = l;
    return;
  }
  int m = (l + r) / 2;
  make(l, m, x * 2);
  make(m + 1, r, x * 2 + 1);
  if (pl[0][node[0][x * 2]] > pl[0][node[0][x * 2 + 1]])
    node[0][x] = node[0][x * 2];
  else
    node[0][x] = node[0][x * 2 + 1];
  if (pl[1][node[1][x * 2]] > pl[1][node[1][x * 2 + 1]])
    node[1][x] = node[1][x * 2];
  else
    node[1][x] = node[1][x * 2 + 1];
}
long long get(int l, int r, int l2, int r2, int x, int ch) {
  if (l > r2 || r < l2) return -1;
  if (l2 > r2) return -1;
  if (l2 <= l && r2 >= r) return node[ch][x];
  if (l == r) return -1;
  int m = (l + r) / 2;
  int o = get(l, m, l2, r2, x * 2, ch),
      o2 = get(m + 1, r, l2, r2, x * 2 + 1, ch);
  if (o == -1) return o2;
  if (o2 == -1) return o;
  if (pl[ch][o] > pl[ch][o2]) return o;
  return o2;
}
long long work(int l, int r) {
  int l2 = r + 1, r2 = l - 1 + n;
  long long o = get(0, 2 * n - 1, l2, r2, 1, 0);
  long long o2 = get(0, 2 * n - 1, l2, r2, 1, 1);
  if (o != o2) return pl[0][o] + pl[1][o2];
  long long o3 = get(0, 2 * n - 1, l2, o - 1, 1, 1),
            o4 = get(0, 2 * n - 1, o + 1, r2, 1, 1),
            o5 = get(0, 2 * n - 1, o + 1, r2, 1, 0), k = -INf, k2 = -INf;
  if (o3 == -1 && o4 >= 0)
    k = pl[1][o4];
  else if (o4 == -1 && o3 >= 0)
    k = pl[1][o3];
  else
    k = max(pl[1][o3], pl[1][o4]);
  if (o5 >= 0) k2 = pl[0][o5];
  return max(pl[0][o] + k, pl[1][o2] + k2);
}
int main() {
  long long o = 0, m;
  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] * 2;
    h[i] *= 2;
  }
  pl[0][0] = pl[1][0] = h[0];
  o = d[0];
  for (int i = 1; i < 2 * n; i++) {
    pl[0][i] = o + h[i];
    pl[1][i] = -o + h[i];
    o += d[i];
  }
  make(0, 2 * n - 1, 1);
  for (int i = 0; i < m; i++) {
    int l, r;
    cin >> l >> r;
    l--;
    r--;
    if (r < l) r += n;
    cout << work(l, r) << endl;
  }
  return 0;
}
