function ssl_set_intersection, l1, l2
if(size(l1, /n_dim) eq 0 && l1 eq -1L) then return, -1L
if(size(l2, /n_dim) eq 0 && l2 eq -1L) then return, -1L
if(size(l2, /n_dim) eq 0) then begin
dprint, 'argument l2 to ssl_set_intersection should be of type array'
return, -1L
endif
if(size(l1, /n_dim) eq 0) then begin
dprint, 'argument l1 to ssl_set_intersection should be of type array'
return, -1L
endif
l3 = [l1, l2]
l3 = l3[bsort(l3)]
id = where(l3 eq shift(l3, 1L), cnt)
if cnt eq 0 then return, id
l3 = l3[id]
s = l3[uniq(l3)]
if(size(s, /n_dim) eq 0) then return, [s]
return, s
end