#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 600010;
int n, m;
int d[N], h[N];
struct Segment_Tree {
  struct Node {
    int l, r;
    unsigned long long lmx, rmx, mx, sum;
  } t[N << 2];
  inline void update(int num) {
    int lc = num << 1, rc = num << 1 | 1;
    t[num].mx = max(t[lc].mx, t[rc].mx);
    t[num].mx = max(t[num].mx, t[lc].rmx + d[t[lc].r] + t[rc].lmx);
    t[num].lmx = max(t[lc].lmx, t[lc].sum + d[t[lc].r] + t[rc].lmx);
    t[num].rmx = max(t[rc].rmx, t[rc].sum + d[t[lc].r] + t[lc].rmx);
    t[num].sum = t[lc].sum + d[t[lc].r] + t[rc].sum;
  }
  inline void build(int l, int r, int num) {
    t[num].l = l;
    t[num].r = r;
    t[num].sum = 0;
    if (l == r)
      t[num].mx = t[num].lmx = t[num].rmx = h[l] << 1;
    else {
      int mid = (l + r) >> 1;
      build(l, mid, num << 1);
      build(mid + 1, r, num << 1 | 1);
      update(num);
    }
  }
  inline Node getmax(int l, int r, int num) {
    if (t[num].l >= l && t[num].r <= r)
      return t[num];
    else {
      int mid = (t[num].l + t[num].r) >> 1;
      if (r <= mid)
        return getmax(l, r, num << 1);
      else if (l > mid)
        return getmax(l, r, num << 1 | 1);
      else {
        Node la = getmax(l, mid, num << 1),
             ra = getmax(mid + 1, r, num << 1 | 1);
        Node ans;
        ans.mx = max(la.mx, ra.mx);
        ans.mx = max(ans.mx, la.rmx + d[mid] + ra.lmx);
        ans.lmx = max(la.lmx, la.sum + d[mid] + ra.lmx);
        ans.rmx = max(ra.rmx, ra.sum + d[mid] + la.rmx);
        ans.sum = la.sum + d[mid] + ra.sum;
        return ans;
      }
    }
  }
  unsigned long long getans(int l, int r) {
    Node p = getmax(l, r, 1);
    return p.mx;
  }
} sgt;
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &d[i]), d[i + n] = d[i];
  for (int i = 1; i <= n; i++) scanf("%d", &h[i]), h[i + n] = h[i];
  sgt.build(1, n << 1, 1);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    if (x <= y)
      cout << sgt.getans(y + 1, x - 1 + n) << endl;
    else
      cout << sgt.getans(y + 1, x - 1) << endl;
  }
  return 0;
}
